start /wait /b 出错时不退出程序
Start /wait /b not exiting program when there is an error
我有一个批处理文件,它将 运行 几个其他文件(我们称之为过程文件),例如 .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
)
所以基本上,批处理文件将根据与每个程序文件关联的虚拟文件的存在,检查是否需要以下文件 运行。
如果我们第二次运行批处理文件,这将阻止我们运行成功运行。
如果任何过程文件中都没有错误,那么代码将正常运行。
退出错误仅在 file/filepath 不正确时才会起作用。
我面临的问题是,因为 Start /wait /b 将始终执行,无论我的过程文件之一是否有错误。因此退出 %errorlevel% 不会是 运行。
如果过程文件损坏,如何让批处理文件检测到错误?
如果其中一个程序文件不起作用,我想 exit/terminal 批处理文件。有什么想法吗?
PS。 /wait 是必需的,因为开始应该按顺序 运行ning。
/b 是必需的,否则程序将在 运行ning a .bat 后停止; /b 允许我们在同一个 cmd window 中 运行 批处理文件。
感谢任何帮助,谢谢
已编辑:
如果我执行以下操作,代码将起作用。但我希望在我的批处理文件中有一个 consistency 格式,因为批处理文件是由 C# 通过解析 .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
)
我在 start /WAIT /B any_program || exit %errorlevel%
中发现了一些问题:
- #1 - %errorlevel% 变量将在解析时展开。因此你的脚本永远不会 returns 正确的退出代码。 See 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
不起作用(忽略 /wait 参数):
==>start /WAIT /B wmic OS GET Caption & echo xxx
xxx
==>Caption
Microsoft Windows 8.1
There's a simple workaround (from SupeUser) 因为 start /B /WAIT
有效:
==>start /B /WAIT wmic OS GET Caption & echo xxx
Caption
Microsoft Windows 8.1
xxx
我有一个批处理文件,它将 运行 几个其他文件(我们称之为过程文件),例如 .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
)
所以基本上,批处理文件将根据与每个程序文件关联的虚拟文件的存在,检查是否需要以下文件 运行。 如果我们第二次运行批处理文件,这将阻止我们运行成功运行。
如果任何过程文件中都没有错误,那么代码将正常运行。
退出错误仅在 file/filepath 不正确时才会起作用。 我面临的问题是,因为 Start /wait /b 将始终执行,无论我的过程文件之一是否有错误。因此退出 %errorlevel% 不会是 运行。
如果过程文件损坏,如何让批处理文件检测到错误? 如果其中一个程序文件不起作用,我想 exit/terminal 批处理文件。有什么想法吗?
PS。 /wait 是必需的,因为开始应该按顺序 运行ning。
/b 是必需的,否则程序将在 运行ning a .bat 后停止; /b 允许我们在同一个 cmd window 中 运行 批处理文件。
感谢任何帮助,谢谢
已编辑: 如果我执行以下操作,代码将起作用。但我希望在我的批处理文件中有一个 consistency 格式,因为批处理文件是由 C# 通过解析 .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
)
我在 start /WAIT /B any_program || exit %errorlevel%
中发现了一些问题:
- #1 - %errorlevel% 变量将在解析时展开。因此你的脚本永远不会 returns 正确的退出代码。 See 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
不起作用(忽略 /wait 参数):
==>start /WAIT /B wmic OS GET Caption & echo xxx
xxx
==>Caption
Microsoft Windows 8.1
There's a simple workaround (from SupeUser) 因为 start /B /WAIT
有效:
==>start /B /WAIT wmic OS GET Caption & echo xxx
Caption
Microsoft Windows 8.1
xxx