【问题标题】:Batch file assignment woes批处理文件分配问题
【发布时间】:2014-01-15 08:05:51
【问题描述】:

以下简单的批处理文件无法按预期工作。它意味着接受一个参数,如果没有提供,它使用一个默认值(在本例中为“default”)。

相反,如果没有提供参数,它会将一个空字符串分配给变量 Arg。

Test.bat:

@echo off
set Arg=%1
if "%Arg%"=="" (
    set Arg=Default
    echo No Arg, so use default value=%Arg%
) else (
    echo Arg=%Arg%
)
pause

Test.bat 的输出是:

No Arg, so use default value=
Press any key to continue . . . 

【问题讨论】:

    标签: batch-file cmd


    【解决方案1】:
    @echo off
    set arg=default
    if not "%~1"=="" set "arg=%~1"
    echo arg is ""%arg%"
    

    【讨论】:

      【解决方案2】:
      @echo off
      
      if [%1] == [] (
         set Arg=Default
      ) else (
         set Arg=%1
      )
      @echo Arg=%Arg%
      

      参考:How to check command line parameter in ".bat" file?

      【讨论】:

        【解决方案3】:

        试试

        @echo off
        set Arg=%1
        if not defined arg set Arg=Default&echo No Arg, so use default
        echo Arg=%Arg%
        

        问题在于,在一个块(括号中的语句系列)内,变量在 PARSE 时解析 - 在指令执行之前。

        @echo off
        set Arg=%1
        if not defined arg set Arg=Default&call echo No Arg, so use default=%%arg%%
        echo Arg=%Arg%
        

        如果您确实希望在报表行上显示默认值。

        【讨论】:

          【解决方案4】:

          使用

          setlocal enabledelayedexpansion
          

          然后是!Arg!,而不是块内的%Arg%。并阅读help set,它解释了这一切。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-03
            • 1970-01-01
            • 1970-01-01
            • 2021-06-23
            • 2013-11-11
            • 2012-07-23
            相关资源
            最近更新 更多