批处理应用之延迟处理
延迟处理可以说是windows批处理中,最恶心和糟糕的设计了。可是没有办法,不了解他,就无法“正常的”使用
批处理。简单的举个列子:
for /f %%i in (temp.txt) do (
set dir=%%i
echo %dir%
)
一个简单的for循环命令,从temp文件中读取需要操作的目录名称,很直观也很简单,可它是错误的!
原因在于,批处理的解释器,对于变量dir会在for循环运行之前就去解释它,此时dir自然是空的,
神奇的是之后set赋值语句竟然没有任何作用。
说白了,批处理默认状态下是不支持局部变量的。那要如何才能让局部变量生效呢?改成这样:
for /f %%i in (temp.txt) do (
setlocal EnableDelayedExpansion
set dir=%%i
echo !dir!
)
注意局部变量必须!包围起来