当前位置:主页>Windows 专区> 正文

批处理问题:SET 命令在 FOR 循环中失效 / SET 环境变量生存域/作用域

文章来源:  文章作者:LoveTide (say no to ISO-8859-1  发布时间:2006-04-04  字体:[缩小字体 放大字体]


  • 我在 FOR 循环中用 SET 为一个环境变量赋值,结果发现该变量始终为空内容,不知何故
    比如在下面的代码中:
    1、第一个 for 语句我是打算取得 YYMMDD 格式的日期,在 for 语句内部的 SET TODAY_FOLDER 语句得不到 TODAY 的值,然而如果放在 for 语句后面就可以
    2、第二、第三两个嵌套 for 语句我打算得到一组 IP 地址,然而 echo 用户端IP是%THE_CLIENT_IP% 得到的仍然是空的

    代码:
    @echo off
    FOR /F "tokens=1-3 delims=- " %%i IN ('date /t') DO (
    SET TODAY=%%i%%j%%k
    SET TODAY_FOLDER=%TODAY:~2%
    )
    REM 如果
    REM SET TODAY_FOLDER=%TODAY:~2%

    REM IP 段:15?-18?,其中 ? 取值范围 [1-9](因每排只有 9 个)
    for /L %%i in (5,1,8) do (
    for /L %%j in (1,1,9) do (
    SET THE_CLIENT_IP=192.168.115.1%%i%%j
    echo %ERRORLEVEL% ClientIP=[%THE_CLIENT_IP%] 192.168.115.1%%i%%j
    )
    )
    REM endlocal

    @echo on


    第二行这样写
    FOR /F " usebackq tokens=1-3 delims=- " %%i IN (`date/t`) DO (

    echo %ERRORLEVEL% ClientIP=[%THE_CLIENT_IP%] 192.168.115.1%%i%%j 字串8
    改为:
    cmd /v:on /c echo %ERRORLEVEL% ClientIP=[!THE_CLIENT_IP!] 192.168.115.1%%i%%j

    cmd /v

    @echo off
    FOR /F "tokens=1-3 delims=- " %%i IN ('date /t') DO (
    SET TODAY=%%i%%j%%k
    echo !TODAY!
    SET TODAY_FOLDER=!TODAY:~2!
    echo !TODAY_FOLDER!
    )



    说白了就是启用/v

    /V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
    允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
    在输入时扩展变量,这与在一个 FOR 循环内不同。


    谢谢两位的提示,遇到这个问题有点意外。
    /*
    启用延迟的环境变量扩展
    如果启用延迟的环境变量扩展,则可以使用感叹号字符来替代运行时的环境变量值。
    */

    总结:
    该问题起因于未启用 cmd.exe 的 /V:ON 选项,/V:ON 选项将禁用环境变量的延缓生效
    如果不加该选项(cmd.exe 默认),则环境变量在诸如 if、for 语句体内的值不会实时的取得

    相关文档:
    1、C:\>help cmd
    2、
    (WindowsXP cmd) http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true 字串4

    (Windows2000 Command Processor FAQ) http://www.microsoft.com/technet/prodtechnol/Windows2000serv/support/FAQW2KCP.mspx

    (WindowsServer2003 cmd)
    http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/d0518719-7154-49b4-954c-0a6c015ab441.mspx?mfr=true

    3、(本帖) http://community.csdn.net/Expert/topic/4661/4661135.xml?temp=.9362757
打印本文  返回顶部  加入收藏  关闭窗口
站内搜索
 
   
Google相关
关于我们  版权申明  广告服务  网站地图  RSS聚合
声明:本站内容收集自网络,转载请联系作者。 本站通过xhtml1.0 css2.1网页标准规范校验。