我正在尝试运行下面的代码片段在我的windows服务器上.
@echo off
set BRANCH_NAME_ID=compiler_branch
if %BRANCH_NAME_ID%==compiler_branch ( echo INSIDE COMPILER BRANCH )
echo %BRANCH_SHORT_ID%|findstr /r "^[r][0-9][0-9]*_00$" & IF %ERRORLEVEL% == 0 ( echo IN IF ) ELSE ( echo INFO else)
pause
我期望唯一的输出应该是INSIDE COMPILER BRANCH
,因为BRANCH_NAME_ID
变量引用了compiler_branch
。但由于某种原因,我也得到了IN IF
。
输出:-
INSIDE COMPILER BRANCH
IN IF
Press any key to continue . . .
根据文档https://ss64.com/nt/findstr.html,我注意到下面并相应地编写了脚本。但由于某种原因,%ERRORLEVEL%
在我的代码的第3行设置为0
,认为字符串不匹配:-
FINDSTR will set %ERRORLEVEL% as follows:
0 A match is found in at least one line of at least one file.
1 If a match is not found in any line of any file, (or if the file is not found at all).
2 Wrong syntax
无效的开关将只在错误流中打印错误消息。
我错过什么了吗?
1条答案
按热度按时间ibps3vxo1#
由于解释器读取文件的方式(请参阅How does the Windows Command Interpreter (CMD.EXE) parse scripts?以获取大量信息),该行中的
%ERRORLEVEL%
在实际运行之前会被替换为当前值。为了运行命令并正确检查值,请将if
语句放在它自己的行中。如果出于某种原因,您绝对坚持使用
&
将命令链接在一起(没有理由这样做,它只会使事情变得更糟imo),那么您可以启用延迟扩展并改用!ERRORLEVEL!
。