Batch file 如何处理批次中的延迟扩展
Batch file 如何处理批次中的延迟扩展,batch-file,Batch File,我在理解如何调用批处理函数时遇到了一些问题,而没有遇到delayedExpansion问题 我得到的错误是 )在这个时候是出乎意料的 经过几次搜索,我明白这是因为启用了延迟扩展,但我不知道如何处理它 @echo off Setlocal EnableDelayedExpansion set RUN_MODE=%1 set STRING=%2 if %RUN_MODE%==1 ( echo %STRING% if "%STRING%"=="empty" ( :d
我在理解如何调用批处理函数时遇到了一些问题,而没有遇到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
切勿在括在
()
括号内的命令块内使用:标签或::标签式注释。检查证据
@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“STRING=%~2”
- 在
%~1
和%~2
- 如果“%RUN\u MODE%”为空变量,则在
中使用双引号(
;如果没有双引号,如果%RUN\u MODE%==1(
可能导致语法错误如果==1(
),即如果“%RUN\u MODE”为空变量,则true条件将导致如果“%RUN\u MODE=”
语句
echo(%STRING%
中的左括号;如果没有它,echo%STRING%
命令显示当前的echo设置echo关闭
消息,如果变量为空STRING
,即如果“%STRING%”==“true”条件导致语句
同时阅读和。切勿在括号内的命令块内使用:label
或::label-like-comment
。检查证据
@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“STRING=%~2”
- 在
%~1
和%~2
- 如果“%RUN\u MODE%”为空变量,则在
中使用双引号(
;如果没有双引号,如果%RUN\u MODE%==1(
可能导致语法错误如果==1(
),即如果“%RUN\u MODE”为空变量,则true条件将导致如果“%RUN\u MODE=”
语句
echo(%STRING%
中的左括号;如果没有它,echo%STRING%
命令显示当前的echo设置echo关闭
消息,如果变量为空STRING
,即如果“%STRING%”==“true”条件导致语句
阅读和。如果“%STRING%”==“empty”(
变为如果“!STRING!”==“empty”),则使用带有!
的延迟扩展来代替%
符号(
。顺便说一句,在块内使用标签是个坏主意,这只会导致错误,您不需要它。只有在一行上的值发生更改时才需要它。括号中的内容是一行。没有它,变量在读取行时会展开。使用它(!var!)它在使用时进行了扩展,这与传统的批处理文件不兼容。因为您不在一行上更改并尝试使用变量-您不需要它。请继续使用esclamation标记来表示错误。如何避免使用labesl?如果您需要在批处理文件中使用标签,请使用GOTO
or调用
命令。如果“%STRING%”==“empty”(
变为如果“!STRING!”==“empty”),则使用带有!
的延迟扩展,而不是%
符号(
。顺便说一句,在块内使用标签是个坏主意,这只会导致错误,您不需要它。只有在一行上的值发生更改时才需要它。括号中的内容是一行。没有它,变量在读取行时会展开。使用它(!var!)它在使用时进行了扩展,这与传统的批处理文件不兼容。因为您不在一行上更改并尝试使用变量-您不需要它。请继续使用esclamation标记来表示错误。如何避免使用labesl?如果您需要在批处理文件中使用标签,请使用GOTO
or调用
命令。