【问题标题】:Why does echo not print the text within an if statement (windows batch file)?为什么 echo 不打印 if 语句(Windows 批处理文件)中的文本?
【发布时间】:2014-07-23 14:09:35
【问题描述】:

我有以下 Windows 批处理文件:

 @echo off
 set MYVAR1=test
 set MYVAR2=
 set MYVAR3=a b c

 setlocal enableDelayedExpansion
 for /l %%x in (1, 1, 3) do (
    if !MYVAR%%x! == "" (
        echo Not defined
    ) else (
        echo Variable is: !MYVAR%%x!
    )
 )

我希望它打印以下输出:

Variable is: test
Not defined
Variable is: a b c

相反,我看到以下输出:

Variable is:  test
Variable is: 
Variable is: a b c

这对我来说没有任何意义!如何更改批处理脚本以获得所需的输出?

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    还需要将延迟表达式括在引号中。

    if "!MYVAR%%x!" == "" (
    

    而不是

    if !MYVAR%%x! == "" (
    

    所以示例代码现在看起来像:

    @echo off
    set MYVAR1=test
    set MYVAR2=
    set MYVAR3=a b c
    
    setlocal enableDelayedExpansion
    for /l %%x in (1, 1, 3) do (
       if "!MYVAR%%x!" == "" (
        echo Not defined
        ) else (
            echo Variable is: !MYVAR%%x!
        )
     )
    

    【讨论】:

    • 你很快 :) 只是迟到了 20 秒。
    • 有时我是。特别是如果我在 1 分钟左右没有得到答案。
    • 当我有机会在虚拟系统上测试您的脚本时,您已经如此迅速地给出了答案,即使在 30 到 60 秒内弄清楚了,您也已经给出了答案。跨度>
    【解决方案2】:

    您现在更正的代码的替代方法不是针对空值进行测试,而是使用if defined

    @echo off
        set "MYVAR1=test"
        set "MYVAR2="
        set "MYVAR3=a b c"
    
        setlocal enableDelayedExpansion
        for /l %%x in (1, 1, 3) do if not defined MYVAR%%x (
            echo Variable %%x Not defined
        ) else (
            echo Variable %%x is: !MYVAR%%x!
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2017-08-01
      • 2021-06-23
      • 1970-01-01
      • 2023-03-20
      • 2022-01-09
      相关资源
      最近更新 更多