echo和windows批处理中for循环中设置的迭代器%%x的值不同
我在编写一些Windows批处理脚本时遇到了一个奇怪的问题:迭代器值echo和windows批处理中for循环中设置的迭代器%%x的值不同,windows,batch-file,Windows,Batch File,我在编写一些Windows批处理脚本时遇到了一个奇怪的问题:迭代器值%%X在for循环中的echo和set之间发生了更改。代码如下: @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不同的原因 有人
%%X
在for循环中的echo
和set
之间发生了更改。代码如下:
@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不同的原因
有人能帮忙吗?谢谢 关键是,通常在代码运行之前展开变量,因此分配给path1的第一个值将一直保留到最后。要避免这种情况,您必须在代码的开头添加SETLOCAL ENABLEDELAYEDEXPANSION
,并使用访问路径1!路径1代码>而不是%path1%
:
@echo off
setlocal EnableDelayedExpansion
for %%x in (%*) do (
echo %%x
set path1=%%x
echo !path1!
)
@echo on
这将迫使解释器在运行时重新计算path1的值
查看更多信息