在写一些Windows批处理脚本的过程中,我遇到了一个奇怪的问题:迭代器值%%X
在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
处添加SETLOCAL ENABLEDELAYEDEXPANSION
,然后用!path1!
访问!path1!
而不是%path1%
:
@echo off setlocal EnableDelayedExpansion for %%x in (%*) do ( echo %%x set path1=%%x echo !path1! ) @echo on
这将迫使解释器在运行时重新评估path1的值。