如何在批处理文件中使用条件语句中断for循环?

时间:2014-08-01 05:24:09

标签: batch-file if-statement for-loop dos break

我正在对大量文件进行一些处理,我想限制我对前面找到的9个文件做的事情。我在批处理文件中尝试了这个,它不起作用。它处理所有文件,并不会在第9个文件停止。我做错了什么?

setlocal
set fileCount=0

for %%I in (*.doc) do (
  rem do stuff here ...
  set /a fileCount+=1
  if "%fileCount%"=="9" exit
)

1 个答案:

答案 0 :(得分:1)

问题是%fileCount%在解析时而不是在执行时间期间被扩展,因此它在执行过程中没有考虑fileCount的更改。所以你的for - 循环等同于:

for %%I in (*.doc) do (
  rem do stuff here ...
  set /a fileCount+=1
  if "0"=="9" exit
)

要更正它,您需要启用并使用延迟扩展。您可以使用setlocal EnableDelayedExpansion而不仅仅是setlocal!fileCount!而不是%fileCount%来实现这一点。所以:

setlocal EnableDelayedExpansion
set fileCount=0

for %%I in (*.doc) do (
  rem do stuff here ...
  set /a fileCount+=1
  if "!fileCount!"=="9" exit
)

有关详细信息,请参阅http://ss64.com/nt/delayedexpansion.html