【发布时间】: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。 -
它解释了条件运算符
&&用于退出代码的用法 equal0表示先前可执行文件/命令的执行成功和||用于退出代码不等于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。
标签: batch-file