出现错误时,启动/等待/ b不退出程序

我有一个batch file,将运行其他文件(让我们称之为程序文件)如.bat,.exe,.py等…

if Not Exist JobStreamUnitTest_CreateTextPython_4-27-2015.txt ( Start /wait /b C:\Users\blee2\Documents\UnitTest\CreateTextFile.py || exit %errorlevel% copy /y nul JobStreamUnitTest_CreateTextPython_4-27-2015.txt ) if Not Exist JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ( Start /wait /b C:\Users\blee2\Documents\UnitTest\CreateNewFile.bat || exit %errorlevel% copy /y nul JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ) if Not Exist JobStreamUnitTest_CreateTextConsole_4-27-2015.txt ( Start /wait /b C:\Users\blee2\Documents\UnitTest\TestConsole.exe apple || exit %errorlevel% copy /y nul JobStreamUnitTest_CreateTextConsole_4-27-2015.txt ) if Not Exist JobStreamUnitTest_HelloWorld_4-27-2015.txt ( Start /wait /b C:\Users\blee2\Documents\UnitTest\HelloWorld.bat || exit %errorlevel% copy /y nul JobStreamUnitTest_HelloWorld_4-27-2015.txt ) 

所以基本上,batch file会根据与每个过程文件相关的虚拟文件的存在来检查是否需要运行下面的文件。 如果我们要第二次运行batch file,这将阻止我们成功运行。

如果在任何过程文件中没有错误,那么代码将正常工作。

只有在文件/文件path不正确的情况下,退出错误才会起作用。 我面对的问题是,因为无论我的过程文件是否有错误,Start / wait / b将始终执行。 因此退出%errorlevel%将不会运行。

如果程序文件损坏,如何让batch file检测到错误? 如果其中一个过程文件不工作,我想退出/terminalbatch file。 有什么想法吗?

PS。 /等待是需要的,因为开始应该按顺序运行。
/ b是需要的,否则运行.bat后程序将停止; / b允许我们在同一个cmd窗口中运行batch file。

感谢任何帮助,并感谢你

编辑:代码将工作,如果我做以下。 但我希望在我的batch file中有一致性格式,因为batch file是由C#生成的,parsing.xml文件。

 if Not Exist JobStreamUnitTest_CreateTextPython_4-27-2015.txt ( C:\Users\blee2\Documents\UnitTest\CreateTextFile.py || exit %errorlevel% copy /y nul JobStreamUnitTest_CreateTextPython_4-27-2015.txt ) if Not Exist JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ( Start /wait /b C:\Users\blee2\Documents\UnitTest\CreateNewFile.bat || exit %errorlevel% copy /y nul JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ) 

Solutions Collecting From Web of "出现错误时,启动/等待/ b不退出程序"

我在start /WAIT /B any_program || exit %errorlevel%发现了一些问题 start /WAIT /B any_program || exit %errorlevel%

  • #1 – %errorlevel%变量将在解析时展开 。 因此你的脚本永远不会返回正确的退出码 请参阅EnableDelayedExpansion 。
  • #2 – || 有条件的命令执行 :不幸的是我不能正确地记录它,但是我所有的尝试与它失败start命令…

恕我直言,下一个代码片段(唯一的例子)可以按预期工作:

 if Not Exist JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ( start /B /WAIT C:\Users\blee2\Documents\UnitTest\CreateNewFile.bat SETLOCAL enabledelayedexpansion if !errorlevel! NEQ 0 exit !errorlevel! ENDLOCAL copy /y nul JobStreamUnitTest_CreateTextBatch_4-27-2015.txt ) 
  • #3 – 执行start命令的错误

start /WAIT /B不起作用(/等待参数被忽略):

 ==>start /WAIT /B wmic OS GET Caption & echo xxx xxx ==>Caption Microsoft Windows 8.1 

有一个简单的解决方法(来自SupeUser)作为start /B /WAIT工作:

 ==>start /B /WAIT wmic OS GET Caption & echo xxx Caption Microsoft Windows 8.1 xxx