为什么设置批处理脚本变量会延迟?

时间:2015-06-02 02:33:18

标签: batch-file

如何解决延迟变量赋值?

(我正在将术语延迟变量赋值,因为它似乎是一个合理的描述性短语)。

示例批处理脚本代码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

1 个答案:

答案 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%%更改值的varCALL ECHO %%errorlevel%%显示,但遗憾的是RESETS错误级别。

相关问题