首页 文章

批处理文件调用错误级别两次

提问于
浏览
0

我在批处理文件errorlevel返回问题上苦苦挣扎,但找不到答案 .
任何人都可以给我任何提示吗?

我有一个外部二进制文件,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,然后从CLI运行"echo %errorlevel%",我可以看到它是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 . 这会是一个问题吗?

2 回答

  • 0

    你所说的都是正确的:myperl.pl返回一个错误级别,批处理文件接受它,然后它返回相应的errorlevel值 . 问题是:批处理文件,返回什么进程返回错误级别?

    此方案始终作为父子关系:父进程执行子进程并等待终止,然后父进程可以获取子进程返回的errorlevel值 . 解决问题的方法是external.exe程序作为子项执行批处理文件(cmd.exe)!但是,如果您“无法控制external.exe”,则无法解决您的问题...

    你怎么知道external.exe程序“读取批处理文件的返回代码(0-成功,其他失败)来决定做什么”?我觉得你现在很困惑 .

  • 0

    终于找到了根本原因 .

    myperl.pl应该是fullpath,否则external.exe不知道myperl.pl在哪里 .

相关问题