在Windows批处理的for循环中,迭代器%% x的值在echo和set之间是不同的

时间:2015-05-18 10:11:55

标签: windows batch-file

在编写一些Windows批处理脚本时遇到了一个奇怪的问题:迭代器值%%X在for循环中的echoset之间发生了变化。这是代码:

@echo off

for %%x in (%*) do (
    echo %%x
    set path1=%%x
    echo %path1%

)

@echo on

调用此脚本时:

c:\> test.bat aaa bbb

结果是:

aaa
bbb
bbb
bbb

第一个bbb%path1%。无法理解为什么这个值与%%X

不同

有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:1)

关键是通常在代码运行之前扩展变量,因此分配给path1的第一个值将保持到最后。为避免这种情况,您必须在代码的开头添加SETLOCAL ENABLEDELAYEDEXPANSION并使用!path1!而不是%path1%访问路径1:

@echo off
setlocal EnableDelayedExpansion

for %%x in (%*) do (
    echo %%x
    set path1=%%x
    echo !path1!

)

@echo on

这将强制解释器在运行时重新评估path1的值。

查看http://ss64.com/nt/delayedexpansion.html了解详情。