我有两个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
答案 0 :(得分:1)
当您在()中有代码时,解释器会将此视为一行代码。解析行时扩展环境变量,而不是在执行时扩展。您可以通过在脚本顶部使用以下代码行来解决此问题:
setlocal enableextensions enabledelayedexpansion
一旦有了这一行,就可以使用
!ERRORLEVEL!
而不是
%ERRORLEVEL%
!而不是%来命名环境变量名称意味着“在执行代码行时展开此变量,而不是在解析它时。”
比尔