This解决方案建议使用BREAK变量打破封闭在外部FOR循环中的内部FOR循环,并将整个循环代码保留在内部" 如果未定义中断&# 34;插入语。虽然在下面的情况下它并不起作用,其中"设置"内部括号中的内部循环更改旨在最小化总运行时间,并且ECHO用于验证内部循环可能仍然运行通过可能长的变量列表,即使其在IF条件内的代码未被执行。没有ECHO,很难验证。
问题是:有没有办法打破内循环,以防它的"设置"正在改变?
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "vars=1 2 3 4 5 6" & set "cars= a b c d e f"
for %%p in (%vars%) do (set "break=" & echo/
for %%k in (!cars!) do (echo '!break!'
if not defined break (set "%%k=%%p" & echo %%k=%%p
set "cars=!cars: %%k=!" & echo '!cars!' & set break=TRUE)))
exit /b
:: Output
''
a=1
' b c d e f'
'TRUE'
'TRUE'
'TRUE'
'TRUE'
'TRUE'
''
b=2
' c d e f'
'TRUE'
'TRUE'
'TRUE'
'TRUE'
''
c=3
' d e f'
'TRUE'
'TRUE'
'TRUE'
''
d=4
' e f'
'TRUE'
'TRUE'
''
e=5
' f'
'TRUE'
''
f=6
''
答案 0 :(得分:-1)
这个片段演示了第二个带有更改“set”的FOR循环中断,如果它从第一个循环中调用为外部函数。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "vars=1 2 3 4 5 6" & set "cars= a b c d e f"
for %%p in (%vars%) do (set "break=" & echo/
call :loop)
exit /b
:loop
for %%k in (!cars!) do (echo '!break!'
if not defined break (set "%%k=%%p" & echo %%k=%%p
set "cars=!cars: %%k=!" & echo '!cars!' & set break=TRUE & exit /b))
exit /b
:: Output
''
a=1
' b c d e f'
''
b=2
' c d e f'
''
c=3
' d e f'
''
d=4
' e f'
''
e=5
' f'
''
f=6
''