在编写一些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
有人可以帮忙吗?谢谢。
答案 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的值。