来自for循环变量替换的变量集的内容是指在Windows批处理脚本中的上一次运行

时间:2014-12-16 09:51:04

标签: batch-file

如果此代码保存为文件tst.bat:

@echo off
for %%a in (%1) do (
    echo "%%~fa"
    set b=%%~fa
    echo "%b%"
)

然后按如下方式调用两次,我希望得到这个:

C:\Windows\Temp>tst.bat abc
"C:\Windows\Temp\abc"
"C:\Windows\Temp\abc"

C:\Windows\Temp>tst.bat xyz
"C:\Windows\Temp\xyz"
"C:\Windows\Temp\xyz"

但相反,我明白了:

C:\Windows\Temp>tst.bat abc
"C:\Windows\Temp\abc"
""

C:\Windows\Temp>tst.bat xyz
"C:\Windows\Temp\xyz"
"C:\Windows\Temp\abc"

我的期望是否错误?

1 个答案:

答案 0 :(得分:1)

曾几何时,有人为我即将给出的答案写了一篇很好的介绍,但我无法找到答案。基本上,如果你想在循环的for循环更新中包含变量,你需要使用delayedexpansion。

@echo off
setlocal enabledelayedexpansion
for %%a in (%1) do (
    echo "%%~fa"
    set b=%%~fa
    echo "!b!"
)