【问题标题】:How to break out of for-loop using condition statement in batch file?如何在批处理文件中使用条件语句打破for循环?
【发布时间】:2014-08-01 05:24:08
【问题描述】:

我正在对大量文件进行一些处理,并且我想将我正在执行的操作限制为找到的前 9 个文件。我已经在批处理文件中尝试过,但它不起作用。它处理所有文件,并且不会在第 9 个文件处停止。我做错了什么?

setlocal
set fileCount=0

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

【问题讨论】:

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


    【解决方案1】:

    问题是%fileCount% 在解析时而不是在执行时被扩展,因此它没有考虑到在执行过程中对fileCount 的更改。所以你的for-loop 相当于这个:

    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

    【讨论】:

    • 谢谢!我没有发现我遗漏了 EnableDelayedExpansion!我一直在来回使用!和 % 以及 fileCount 变量的其他变体。再次感谢!
    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2016-08-27
    • 2023-04-08
    相关资源
    最近更新 更多