(我使用的是Win10 20H2)
我知道如果你有command A && command B,那么在“成功完成”时才command B执行是否成功的呢?command Acommand A
errorlevel's,但不可能是这样,如下所示,如果您在没有输入内容的情况下按 Enter 键,那么,正如预期的那样,您将不会看到“成功”消息,并且errorlevel是变成1:
@echo off
:loop
set /p u_p= && echo success
echo current errorlevel %errorlevel%
goto loop
Run Code Online (Sandbox Code Playgroud)errorlevel但是,如果您随后输入有效的输入,尽管剩余时间为 ,
您仍会收到成功消息1,那么是什么触发了&&给出成功消息呢?errorlevel,但是我已经尝试过,并替换引用 的行errorlevel,但我仍然得到指示成功的输出,尽管errorlevel不是0输入空输入后的所有后续输入:
if errorlevel 1 (echo current errorlevel geq 1) else (echo current errorlevel leq 0)
Run Code Online (Sandbox Code Playgroud)
我相当确定解释不是&& 由a 触发的0 errorlevel,而是代码导致了errorlevel?的错误报告。
是的,但你失踪了enabledelayedexpansion。
这是必需的,因为脚本中实际上存在一个循环,并且第一次设置变量后就不会更改enabledelayedexpansion。errorlevel
使用setlocal enabledelayedexpansion将给出您期望的行为:
@echo off
setlocal enabledelayedexpansion
:loop
set /p u_p= && echo success
echo current errorlevel %errorlevel%
goto loop
endlocal
Run Code Online (Sandbox Code Playgroud)
启用延迟扩展
设置
EnabledDelayedExpansion将导致每个变量在执行时而不是在解析时扩展。
Source Setlocal - 局部变量 - Windows CMD - SS64.com