我正在使用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%
打印--dbs
和ECHO %paramName%
打印ECHO is off
。 SET paramName=%arg%
的行不符合我的预期。 %parameName%
也应打印--dbs
。但是,它似乎打印了一个空变量。
答案 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