我在批处理文件错误级别返回问题上苦苦挣扎,但找不到答案 任何人都可以给我任何提示吗?
我有一个外部二进制文件,external.exe读取批处理文件的返回代码(0成功,其他失败)以决定该怎么做。
在批处理文件mybatch.cmd中,我想运行一个脚本(perl)并将结果返回到批处理文件。
例如, mybatch.cmd :
@echo off
myperl.pl
exit %errorlevel%
myperl.pl 是:
#!perl.exe
exit 0;
所以我希望myperl.pl将值0返回到批处理文件,然后批处理文件将0返回到external.exe文件。
但是external.exe没有按预期工作。
1)如果我从CLI运行mybatch.cmd,然后" echo%errorlevel%"从CLI,我可以看到它是0。
2)如果我添加一行来显示myperl.pl的返回代码,我可以看到myperl.pl的返回代码正好是0。
例如:
@echo off
myperl.pl
echo %errorlevel%
REM exit %errorlevel%
它将显示0,因此perl脚本将完全返回该值。
3)如果我添加一行来手动将返回代码设置为0,则external.exe可以正常工作。
@echo off
myperl.pl
result=0
exit %result%
这真的很奇怪。有任何想法吗?我无法控制external.exe,所以我无法对其进行调试。
在此示例中,%errorlevel%被调用两次:
1)从myperl.pl返回批处理
2)从mybatch.cmd返回到external.exe。这会是一个问题吗?
答案 0 :(得分:0)
你所说的都是对的:myperl.pl返回一个错误级别,批处理文件接受它,然后它返回相应的errorlevel值。问题是:批处理文件,什么进程返回错误级别?
此方案始终作为父子关系:父进程执行子进程并等待终止,然后父进程可以获取子进程返回的errorlevel值。解决问题的方法是,如果external.exe程序作为子项执行批处理文件(cmd.exe)!但是,如果您“无法控制external.exe”,则无法解决您的问题......
你怎么知道external.exe程序“读取批处理文件的返回代码(0-成功,其他失败)来决定做什么”?我认为你现在感到困惑。
答案 1 :(得分:0)
最终找到根本原因。
myperl.pl应该带有完整路径,否则external.exe不知道myperl.pl的位置。