gpt4 book ai didi

windows - Start/wait/b 出错时不退出程序

转载 作者:可可西里 更新时间:2023-11-01 14:49:20 25 4
gpt4 key购买 nike

我有一个批处理文件,它将运行几个其他文件(我们称之为过程文件),例如 .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
)

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

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

退出错误仅在文件/文件路径不正确时起作用。我面临的问题是,因为 Start/wait/b 将始终执行,无论我的过程文件之一是否有错误。因此 exit %errorlevel% 不会运行。

如果过程文件损坏,如何让批处理文件检测到错误?如果其中一个过程文件不起作用,我想退出/终止批处理文件。有什么想法吗?

附言。/wait 是必需的,因为启动应该按顺序运行。
/b 是必需的,否则程序将在运行 .bat 后停止;/b 允许我们在同一个 cmd 窗口中运行批处理文件。

感谢任何帮助,谢谢

编辑:如果我执行以下操作,代码将起作用。但我希望在我的批处理文件中有一个一致性格式,因为批处理文件是由 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 || 中发现了一些问题退出 %errorlevel%:

  • #1 - %errorlevel% 变量将在解析时展开。因此您的脚本永远不会返回正确的退出代码。 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

关于windows - Start/wait/b 出错时不退出程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com