我有一个调用C#程序的批处理文件。这个C#程序调用SQL Server数据库。 有时它无法连接到数据库,异常处理程序打印堆栈跟踪并退出c#程序。我想尝试最多运行该程序5次。 如果成功(在5次尝试之前),则转到下一步(CheckStatus)否则出错并退出。
当我运行它时,即使C#程序出错,它也会将%ERRORLEVEL%打印为零。
@ECHO OFF
SET Header=-----------------------------------------------------
SET Logfile=C:\LOG\log.txt
set %ERRORLEVEL% = 0
echo %header%
ECHO Running the batch file >> %Logfile%
if '%1' == '' goto usage
if '%2' == '' goto usage
if '%1' == '/?' goto usage
if '%1' == '-?' goto usage
if '%1' == '?' goto usage
if '%1' == '/help' goto usage
SET SQLServer=dbsql\production
SET SQLUser=user1
SET SQLPass=pwd1
SET SQLCommandMaster=osql -S%SQLServer% -n -U%SQLUser% -P%SQLPass% -b -i
GOTO %1%
:Start
Set count=0
:RunCSharpProgram
set /a count+=1
ECHO starting RunCSharpProgram count >> %Logfile%
timeout /t 10
SET RunningStep="RunCSharpProgram"
start "" "C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe"
ECHO %ERRORLEVEL% >> %Logfile%
IF %ERRORLEVEL% ==1 and count LEQ 5 (GOTO RunCSharpProgram)
IF %ERRORLEVEL% ==1 and count EQ 5 (GOTO error)
IF %ERRORLEVEL% ==0 (GOTO CheckStatus)
:CheckStatus
ECHO Check Status of tables >> %Logfile%
REM %SQLCOMMANDMASTER% /Q "EXEC TestDB.dbo.CheckStatus"
goto end
:usage
echo Usage: %0 'start step' 'end step'
goto end
:error
REM ---------------------------------------------------------------------
ECHO ERROR RUNNING BatchFileTest.BAT >> %Logfile%
:end
echo %header% >> %Logfile%
echo END >> %Logfile%
不确定此批处理文件有什么问题。 谢谢 MR
答案 0 :(得分:3)
当您使用start
时,它会启动一个新shell来运行您的程序。
启动单独的命令提示符窗口以运行指定的程序或命令。
由于它是单独的命令提示符,您将不取回错误代码。所以,简单的解决方案不要使用start
而不是
start "" "C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe"
你可以使用
"C:\CSharpProject\GetData\GetData\bin\Debug\GetData.exe"