无法在Windows批处理脚本中将参数值设置为变为空的变量

时间:2014-12-21 05:39:47

标签: windows batch-file arguments command-line-arguments

我正在使用SHIFT循环遍历所有命令行参数。我得到了ECHO is off.的结果。它可能会打印空变量。

:argLoopStart
    SET paramName=
    SET arg=%1
    IF -%arg%-==-- GOTO argLoopEnd
    IF %arg:~0,2%==-- (
        SET paramName=%arg%
        ECHO %arg%
        ECHO %paramName%
    ) 
    SHIFT
    GOTO argLoopStart
:argLoopEnd

通过运行命令fake-command --dbs=mydbname,我得到了这个:

--dbs
ECHO is off.

根据上面的代码,ECHO %arg%打印--dbsECHO %paramName%打印ECHO is offSET paramName=%arg%的行不符合我的预期。 %parameName%也应打印--dbs。但是,它似乎打印了一个空变量。

1 个答案:

答案 0 :(得分:1)

您需要在脚本顶部使用SETLOCAL EnableDelayedExpansion启用延迟展开:

  

延迟扩展将导致变量在执行时扩展   时间而不是在解析时,这个选项打开了   SETLOCAL命令。当延迟扩展有效时,变量可能是   使用!variable_name引用! (除了正常情况   %variable_name%)

@echo off
setlocal enabledelayedexpansion

:argLoopStart
set paramName=
set arg=%1
if -!arg!-==-- goto argLoopEnd
if %arg:~0,2%==-- (
    set paramName=!arg!
    echo !arg!
    echo !paramName!
)
shift
goto argLoopStart

:argLoopEnd
相关问题