为什么变量在/ F命令内部不起作用?

时间:2017-03-29 18:15:06

标签: windows batch-file variables

如果您在此for /f命令中有变量,则不会将其打印到文件中。

setlocal EnableDelayedExpansion
for /F %%i in ('dir /B') do (
    set duration=asdf
    echo %duration% > file.txt
)

file.txt的内容:Echo is ON.

如果您将set duration=asdf移出for /f换行并将其放在setlocal行下方,则说明其工作正确并将asdf打印到file.txt

为什么呢?如何使用for命令中的set变量执行此操作?

1 个答案:

答案 0 :(得分:1)

这是由于delayed expansion导致变量在同一命令中停止 set used

你在Echo is ON.得到file.txt,因为命令解释器正在读取echo命令:

echo > file.txt

echo /?

记录的内容
  

键入不带参数的ECHO以显示当前回波设置。


最简单的解决方法是将%替换为!

更新了脚本:

setlocal EnableDelayedExpansion
for /F %%i in ('dir /B') do (
    set duration=asdf
    echo !duration! > file.txt
)