代码之家  ›  专栏  ›  技术社区  ›  RameshVel

循环DOS批处理文件中的变量分配问题

  •  4
  • RameshVel  · 技术社区  · 14 年前

    我在DOS脚本for循环中有一个变量分配问题。它从不赋值,它总是空的。在样本代码下面

    @echo off
    set ans=%1
    SET STRING=%ans:"=%
    
    echo Parsing the string "%STRING%":
    for /f "tokens=1-2" %%a in ("%STRING%") do (
     set Word1 =%%a
     echo Word 1: %%a
     echo Word 1: %Word1%
     set Word2 =%%b
     if %%b.==. (Set server =\\.\pipe\mssql$microsoft##ssee\sql\query ) else (Set server =%%b)
    )
    echo Server name "%server%"
    sqlcmd -s %server%
    

    未给变量赋值 单词1 . 但当我回送%%A时,它会显示正确的值。以及在最后一个空值检查条件中,服务器变量从未设置。我很困惑。有人能帮我吗??

    附笔: 脚本的输入是任何2个字的字符串(例如:a.bat“l dev server”)。

    1 回复  |  直到 14 年前
        1
  •  11
  •   Michael Madsen    14 年前

    您需要使用延迟扩展- !Word1! 而不是 %Word1% .

    默认情况下,当shell第一次读取语句时,所有变量都被其当前值替换,并且每次命中该行时都使用修改后的语句。这就是DOS的工作原理,为了向后兼容,它在Windows Shell中保持了这种方式。

    另一方面,延迟的扩展在每次命中语句时都会重新插入值。这将给你期望的结果。