gpt4 book ai didi

batch-file - 带有Task Scheduler返回代码的嵌套批处理文件

转载 作者:行者123 更新时间:2023-12-03 08:29:07 25 4
gpt4 key购买 nike

我有一些批处理文件,它们在一周的某些天运行某些任务,直到我需要该任务的同事指出我的代码正在发送一封电子邮件,指出该过程已失败,但Task Scheduler仍在运行时,我认为它们工作正常表示任务运行正常。然后,我们检查了输出,它们看起来是正确的。

本质上,我的批处理文件调用另一个批处理文件,该批处理文件运行一个可执行文件,有时还运行一个python程序(取决于它的任务)。然后检查该批处理文件的返回码,并发送适当的电子邮件(我在下面附加了我的这些批处理文件中的一个的代码)。

我的问题是:如果可执行文件失败,因此内部批处理文件失败并且运行了失败的电子邮件python脚本,则整个批处理文件是否返回0x00?还是会因为“某事”出错而返回内部批处理文件的错误代码?

ECHO ON
cd G:\Reports\Batch Files\
G:
call ContactsReview.bat
IF %ERRORLEVEL% NEQ 0 (
python G:\mtsprograms\python\ContactsFailed.py
)
IF %ERRORLEVEL% EQU 0 (
python G:\mtsprograms\python\ContactsReviewEmail.py
)

我对此问题的解释是,如果ContactsReview.bat失败并且错误检查运行了ContactsFailed.py脚本,则整个批处理文件是否会认为“嘿,我完成了脚本,返回0x00”?我编写此代码是假定它认为“ContactsReview.bat失败,并显示此错误,处理了该错误,并返回了错误代码”。

最佳答案

考虑一下-您通过ERRORLEVEL检测到错误,但是随后运行了另一个命令(python)。因此,现在您的ERRORLEVEL报告python命令的返回状态,而不是ContactsReview.bat调用。

如果要保留ERRORLEVEL,则必须将其保存在变量中,然后可以使用EXIT/B使用适当的返回码退出主脚本。

需要注意的一件事-每当调用python.exe之类的外部命令时,ERRORLEVEL都会设置为新的返回码。但是cmd.exe与它处理内部命令的方式不一致。通常,如果发生错误(DEL是一个异常(exception)),所有内部命令都将设置ERRORLEVEL,但是某些命令(如ECHO和GOTO)不会在成功时清除ERRORLEVEL,而其他命令(如DIR和CD)会在成功时清除ERRORLEVEL。

无论如何,以下应该可以解决您的问题。

echo on
cd /d G:\Reports\Batch Files\
call ContactsReview.bat
set "err=%errorlevel%"
if %err% neq 0 (
python G:\mtsprograms\python\ContactsFailed.py
) else (
python G:\mtsprograms\python\ContactsReviewEmail.py
)
exit /b %err%

关于batch-file - 带有Task Scheduler返回代码的嵌套批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042803/

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