蝙蝠没有返回正确的退出状态

时间:2013-04-10 02:19:37

标签: windows batch-file cmd dos exit

我有两个bat文件。 callexcode.cmd调用excode.cmd,它只调用不存在的文件'saurabh'。当我想在调用者中打印错误代码时(在这种情况下为callexcode.cmd,我得到0表示它是成功的。但错误代码为1,因为没有名为'saurabh'的文件。我正在打印退出两个bat文件中的代码.callie显示退出代码为1,而调用者显示退出代码为0.任何人都可以看看,让我知道我哪里出错。更确切地说退出代码是搞砸了。

callExcode.cmd

 IF "%1"=="abc" (
  SET good=%2
 )
 IF /I "%good%" == "pqr" ( 
 CALL exCode
 echo ' in file callexcode, error level ret = %ERRORLEVEL%'
 @EXIT /B %ERRORLEVEL% 
 )

excode.cmd

CALL saurabh 
echo 'in file excode'
echo 'exit code %ERRORLEVEL%'
@EXIT /B %ERRORLEVEL% 

输出 C:\ docs> callExcode.cmd abc pqr

C:\ docs> IF“abc”==“abc”(SET good = pqr)

C:\ docs> IF / I“pqr”==“pqr”( CALL exCode  echo'在文件callexcode中,错误级别ret = 0'

C:\ docs> CALL saurabh 'saurabh'不被视为内部或外部命令, 可操作程序或批处理文件。

C:\ docs> echo'in file excode' 'in file excode'

C:\ docs> echo'export code 1' '退出代码1' '在文件callexcode中,错误级别ret = 0'

提前致谢!

SAURABH

1 个答案:

答案 0 :(得分:1)

当您在()中有代码时,解释器会将此视为一行代码。解析行时扩展环境变量,而不是在执行时扩展。您可以通过在脚本顶部使用以下代码行来解决此问题:

setlocal enableextensions enabledelayedexpansion

一旦有了这一行,就可以使用

!ERRORLEVEL!

而不是

%ERRORLEVEL%

而不是来命名环境变量名称意味着“在执行代码行时展开此变量,而不是在解析它时。”

比尔