我有以下代码:
echo off
set n=11
set m=12
set /a nme=3
set /a mdiff=nme-1
pause
if %n% NEQ %m% (
if %mdiff% LEQ 3 (
for /l %%C in (1,1,3) do (
if %%C EQU 1 (
set mon=Apr
)
set num=1%mon%
)
)
)
echo %num%
pause
Run Code Online (Sandbox Code Playgroud)
这给了我输出1
而不是1Apr
. 但是,当我将set num=1%mon%
所有 if 和 for 循环放在外面时,它会给出正确的结果。
请向我解释这里发生了什么以及如何在循环内获得正确的结果。
另外,最大深度if
和for
级别是多少?
您需要做的是将 aSetLocal EnableDelayedExpansion
放在脚本的顶部并!
在变量周围使用s 。
延迟扩展将导致变量在执行时而不是在解析时扩展,此选项随
SETLOCAL
命令打开。当延迟扩展生效时,可以使用!variable_name!
(除了正常的%variable_name%
)引用变量延迟变量扩展在使用
FOR
循环时通常很有用,通常整个FOR
循环被评估为单个命令,即使它跨越批处理脚本的多行。
基本上,for
循环被解析一次。循环的每次迭代,语句 get 都会执行。通过启用此选项,变量可以在执行时更改,无需重新解析,即在循环内。
@echo off
SetLocal EnableDelayedExpansion
set n=11
set m=12
set /a nme=3
set /a mdiff=nme-1
pause
if %n% NEQ %m% (
if %mdiff% LEQ 3 (
for /l %%C in (1,1,3) do (
if %%C EQU 1 (
set mon=Apr
set num=1!mon!
)
)
)
)
echo %num%
pause
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24022 次 |
最近记录: |