如何处理批量延迟扩展

时间:2016-02-08 09:54:51

标签: batch-file


我在理解如何调用批处理函数时遇到一些问题,而没有使用delayedExpansion的问题 我得到的错误是

  

)此时出人意料。

经过几次搜索,我明白这是因为启用了延迟扩展,但我不知道如何处理它。

@echo off
Setlocal EnableDelayedExpansion

set RUN_MODE=%1
set STRING=%2

if %RUN_MODE%==1 (
    echo %STRING%
    if "%STRING%"=="empty" (
        :dontDo
    )
    :doSomething
    :dontDo
)
goto:eof

:doSomething
    echo doingSomething
goto:eof

1 个答案:

答案 0 :(得分:0)

从不:label括号内的命令块中使用:: label-like comment()。检查this stackoverflow thread以获取证据。

@echo off
Setlocal EnableExtensions
rem in current code snippet: no need for EnableDelayedExpansion 

set "RUN_MODE=%~1"
set "STRING=%~2"

if "%RUN_MODE%"=="1" (
    echo(%STRING%
    if "%STRING%"=="empty" (
        rem dontDo
    ) else
        CALL :doSomething
        rem or `GOTO :doSomething` instead of `CALL` if don't need to return here
    )
    rem conjoint for `dontDo` and `doSomething` continues here
)
goto:eof

:doSomething
    echo doingSomething
goto:eof

请注意

  • double quotes in set,例如set "STRING=%~2"
  • %~1%~2
  • parameter extensions
  • if "%RUN_MODE%"=="1" (中的双引号;如果没有它们,if %RUN_MODE%==1 (可能会在空变量if ==1 (的情况下导致语法错误RUN_MODE,即if "%RUN_MODE"==""语句中的真实条件结果
  • echo(%STRING%中的左括号;如果没有它,echo %STRING%命令会在空变量ECHO is off的情况下显示当前回显设置STRING消息,即if "%STRING%"==""语句中的真实条件结果

同时阅读http://ss64.com/nt/call.htmlhttp://ss64.com/nt/goto.html