批处理文件 - .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 Nextpython.exe 上以0 退出的标签行:Next 下方的行上继续批处理文件处理成功(或任何程序员都不应该使用的负值退出值的程序或脚本中的用户)。 顺便说一句:可以在批处理文件中多次使用相同的标签。但建议在批处理文件中使用唯一标签,即使用Next1Next2Next3、...和goto Next1goto Next2goto 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 文件中的错误处理的主要内容,如果未能解决你的问题,请参考以下文章

bat文件命令大全

BAT批处理文件对文件夹中的文件进行计数然后减1

bat批处理:根据文本文件批量重命名文件

在.bat(批处理文件)中查找和替换导致未知错误的字符串

如何使用bat批处理通过rar命令压缩/解压缩目录?

bat批处理文件运行时隐藏cmd窗口