使用更改集断开批处理FOR循环

时间:2016-07-14 07:33:29

标签: batch-file cmd

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
''

1 个答案:

答案 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
''