批处理应用之延迟处理

延迟处理可以说是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!
    )
注意局部变量必须!包围起来

posted @ 2010-12-20 11:02  hjtc  Views(381)  Comments(0Edit  收藏  举报