批处理文件 - .bat 文件中的错误处理
Posted
技术标签:
【中文标题】批处理文件 - .bat 文件中的错误处理【英文标题】:Batch Files - Error Handling in .bat file 【发布时间】:2022-01-05 08:59:40 【问题描述】:我有一个运行四个 python 文件的 .bat 文件。我需要在这个 .bat 文件中进行一些错误处理。基本上,如果出现任何问题,我想停止这个过程。
--想要在任何 python 脚本失败时停止进程。 --python没有失败的时候想正常运行。
python "C:\EarthSQL-Testing\mckayplod.py" "C:\EarthSQL-Testing"
IF %ERRORLEVEL% EQ 0 GOTO :Next
IF %ERRORLEVEL% NEQ 0 ECHO PYTHON ERROR HAS FOUND ->Error.txt
Copy "C:\EarthSQL-Testing\Error.txt" "C:\Users\EarthSQL\EarthSQL\Documents - Documents\ErrorLog\" /y
PAUSE
:Next
python "C:\EarthSQL-Testing\mckaypersonnel.py" "C:\EarthSQL-Testing"
IF %ERRORLEVEL% EQ 0 GOTO :Next
IF %ERRORLEVEL% NEQ 0 ECHO PYTHON ERROR HAS FOUND ->Error.txt
Copy "C:\EarthSQL-Testing\Error.txt" "C:\Users\EarthSQL\EarthSQL\Documents - Documents\ErrorLog\" /y
PAUSE
:Next
python "C:\EarthSQL-Testing\mckaydrilling.py" "C:\EarthSQL-Testing"
IF %ERRORLEVEL% EQ 0 GOTO :Next
IF %ERRORLEVEL% NEQ 0 ECHO PYTHON ERROR HAS FOUND ->Error.txt
Copy "C:\EarthSQL-Testing\Error.txt" "C:\Users\EarthSQL\EarthSQL\Documents - Documents\ErrorLog\" /y
PAUSE
:Next
python "C:\EarthSQL-Testing\mckactivities.py" "C:\EarthSQL-Testing"
IF %ERRORLEVEL% EQ 0 GOTO :Next
IF %ERRORLEVEL% NEQ 0 ECHO PYTHON ERROR HAS FOUND ->Error.txt
Copy "C:\EarthSQL-Testing\Error.txt" "C:\Users\EarthSQL\EarthSQL\Documents - Documents\ErrorLog\" /y
PAUSE
目前上面的脚本,它只运行第一个 python 文件,然后它不运行第二个 python 文件和以后的文件。任何帮助我的批处理文件有什么问题????
【问题讨论】:
请打开command prompt,运行if /?
并阅读输出使用帮助。在第一个输出帮助页面上已经解释了如何使用 IF 条件和有效且始终有效的语法评估可执行文件或命令的退出代码 EQ
不是有效的比较运算符,可以在debugging a batch file 的错误消息输出中看到我建议阅读single line with multiple commands using Windows batch file。
它解释了条件运算符&&
用于退出代码的用法 equal 0
表示先前可执行文件/命令的执行成功和 ||
用于退出代码不等于 0
被大多数程序用于非 100% 成功执行。还解释了如何使用,例如,if not errorlevel 1 goto Next
在python.exe
上以0
退出的标签行:Next
下方的行上继续批处理文件处理成功(或任何程序员都不应该使用的负值退出值的程序或脚本中的用户)。
顺便说一句:可以在批处理文件中多次使用相同的标签。但建议在批处理文件中使用唯一标签,即使用Next1
、Next2
、Next3
、...和goto Next1
、goto Next2
、goto Next3
、...或更有意义的标签.所以使用python.exe "C:\EarthSQL-Testing\mckayplod.py" "C:\EarthSQL-Testing" && goto Next1
,接下来在执行Python脚本mckayplod.py
时执行的命令行以大于0的值退出,然后是标签行:Next1
。
【参考方案1】:
这可能没有什么不同,但我建议尝试用 == 替换 EQ,用 !==! 替换 NEQ
【讨论】:
这没有用,因为完全是错误的。请打开命令提示符窗口并运行if /?
。这里也可以使用字符串比较运算符==
,但没有比较运算符!=
或!==
或!==!
。不相等的字符串比较是用not "..." == "..."
完成的。有关如何使用 IF 进行字符串比较的更多详细信息,请参阅Symbol equivalent to NEQ, LSS, GTR, etc. in Windows batch files。
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于批处理文件 - .bat 文件中的错误处理的主要内容,如果未能解决你的问题,请参考以下文章