迭代器%% x的值在windows批处理中的循环中设置不同

在写一些Windows批处理脚本的过程中,我遇到了一个奇怪的问题:迭代器值%%Xechoset循环之间变化。 这里是代码:

 @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的值。

查看http://ss64.com/nt/delayedexpansion.html了解更多信息。