如何解决延迟变量赋值?
(我正在将术语延迟变量赋值,因为它似乎是一个合理的描述性短语)。
示例批处理脚本代码script.bat:
@echo off
set mylocation=%CD%
echo mylocation %mylocation%
echo CD %CD%
实际输出
C:> script.bat
mylocation
CD C:\
C:>
我想要它做什么(或者认为它会做)
C:> script.bat
mylocation C:\
CD C:\
C:>
编辑(更改):如果我在脚本结束后在命令提示符中回显%mylocation%,则它有一个值。
C:>echo %mylocation%
C:\
C:>
修改:这是原始代码,您可以查看YouTube视频https://youtu.be/jQzEFD3yISA - 我尝试尽可能多地显示详细信息,以便一切都准确无误。
@echo off
set natasha_command=%1
if %natasha_command% == start (
set mylocation=%CD%
echo mylocation %mylocation%
echo CD %CD%
)
goto :eof
答案 0 :(得分:3)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。< / p>
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
请注意使用显示CALL ECHO %%var%%
更改值的var
。 CALL ECHO %%errorlevel%%
显示,但遗憾的是RESETS错误级别。