Batch file 使用%ERRORLEVEL%从批处理脚本中的子例程返回值

Batch file 使用%ERRORLEVEL%从批处理脚本中的子例程返回值,batch-file,cmd,subroutine,errorlevel,Batch File,Cmd,Subroutine,Errorlevel,我一直在重复下面的代码,但我无法确定为什么%ERRORLEVEL%始终为零 @回音 设置activePerl\u SiteBinPath=D:\ProgramFiles\activePerl\site\bin 调用:isInPath%activePerl\u SiteBinPath%&set-foundActivePerl\u SiteBinPath=%ERRORLEVEL% 回显%foundActivePerl\u SiteBinPath% 设置blub=d:\blub 调用:isInPath

我一直在重复下面的代码,但我无法确定为什么%ERRORLEVEL%始终为零

@回音 设置activePerl\u SiteBinPath=D:\ProgramFiles\activePerl\site\bin 调用:isInPath%activePerl\u SiteBinPath%&set-foundActivePerl\u SiteBinPath=%ERRORLEVEL% 回显%foundActivePerl\u SiteBinPath% 设置blub=d:\blub 调用:isInPath%blub%&设置foundBlub=%ERRORLEVEL% 回声%foundBlub% 退出/b :isInPath ::测试变量pathVar中存储的路径是否存在于%path%中。 :: ::结果作为ERRORLEVEL返回: ::如果在%PATH%中找到pathVar,则为0。 ::1如果在%path%中找不到pathVar路径。 ::2如果parhVar路径丢失/未定义。 ::错误检查 如果%%1==退出/b2 设置路径变量=%~1 对于/f%%i in'echo;%%路径%%;^|查找/c/i;%pathVar%;'做 set/a foundPathVar=%%i 如果/i%foundPathVar%equ 0 退出/b 1 设置foundPathVar=0 退出/b0 我得到以下输出

0
0
但我希望

0
1

根据我在里面做的回音:情况1退出/b0和情况2退出/b1的isInPath被调用。但为什么在这两种情况下%ERRORLEVEL%都为零?我完全不明白。请帮忙

在cmd中,整行将立即被解析为变量替换。因此,在执行以下行时,errorlevel为0

调用:isInPath%blub%&设置foundBlub=%ERRORLEVEL% 你需要使用

SETLOCAL EnableDelayedExpansion 呼叫:isInPath%blub%&设置foundBlub=!错误等级!
在cmd中,整行将立即被解析为变量替换。因此,在执行以下行时,errorlevel为0

调用:isInPath%blub%&设置foundBlub=%ERRORLEVEL% 你需要使用

SETLOCAL EnableDelayedExpansion 呼叫:isInPath%blub%&设置foundBlub=!错误等级!
只要把线路一分为二,问题就迎刃而解了expansion@Stephan这太明显了,意味着将线路一分为二应该可以毫不拖延地解决问题expansion@Stephan那太明显了