2013-04-10 68 views
0

我有两个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:\文档> callExcode.cmd ABC PQR

C:\文档> IF “ABC” == “ABC”(SET好= PQR)

C:\文档> IF/I “PQR” == “PQR”( CALL exCode 回波 '在文件callexcode,误差水平RET = 0'

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

C:\ '在文件excode'

Ç文档>回波 '在文件excode' :\文档>回波 '退出代码1' '退出代码1' 在文件callexcode ',误差水平ret = 0'

在此先感谢!

SAURABH

回答

1

当你在()代码,解释认为这是一个单一的代码行。环境变量在行被解析时展开,而不是在执行时展开。您可以解决此通过使用此行代码在你的脚本的顶部:

setlocal enableextensions enabledelayedexpansion 

一旦你有那行,你可以使用

!ERRORLEVEL! 

,而不是

%ERRORLEVEL% 

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

Bill

+0

It works!非常感谢,比尔。欣赏它。 – 2013-04-10 05:31:37