我在理解如何调用批处理函数时遇到一些问题,而没有使用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
答案 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
请注意
set
,例如set "STRING=%~2"
%~1
和%~2
中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.html和http://ss64.com/nt/goto.html。