从内循环批处理中断

时间:2014-05-29 11:23:40

标签: loops batch-file break

我有3个嵌套循环,当在目录中找到具有特定模式的文件时,我想从第三个循环中断。我使用标签" break"在每个创建文件之后,但问题是这些方法从所有3个循环中退出。enter code here

FOR /F "delims= " %%A in (file.txt) do (
  set pattern=%%A
  set file=""
  FOR /f "tokens=*" %%t in (
 'dir /a:d /b !DIR!'
  ) do (
    FOR /f "tokens=*" %%f in (
    'dir /a:d /b "!DIR!\%%t"'
    ) do (
    FOR /f "tokens=*" %%g in (
    'dir /b !DIR!\%%t\%%f ^| findstr /i /c:"!pattern!.inst"'
    ) do (
      set file=%%g
      echo "file: !file!"
      goto :break // BREAK
     )
    )
  ) 
  : break
  IF not [!file!] == [""] (
    echo "found !file!"
  )
)

1 个答案:

答案 0 :(得分:0)

你做不到。 for循环结构中的任何goto都将取消循环。

如果您只需要第一个元素,则可以在内循环中进行测试

if not defined file set "file==%%g"

或者您可以过滤dir命令的输出,只将第一行提供给for命令

for /f "delims=" %%a in (file.txt) do (
    set "file="
    for /d %%t in ("!dir!\*"
    ) do for /d %%f in ("%%~ft\*"
    ) do for /f "tokens=1,* delims=:" %%d in (
        'dir /b "%%~ff\*.inst*" ^| findstr /n /i /c:"%%a.inst" ^| findstr /b /c:"1:" '
    ) do set "file=%%e"

    if defined file echo found !file!
)

无论如何,不​​知道代码的目的这只是一个意见,但首先检索文件夹/文件列表考虑到一个临时文件,然后迭代它检查检索到的信息将更有效“模式”,而不是必须迭代每个模式的完整文件夹结构。