我有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!"
)
)
答案 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!
)
无论如何,不知道代码的目的这只是一个意见,但首先检索文件夹/文件列表考虑到一个临时文件,然后迭代它检查检索到的信息将更有效“模式”,而不是必须迭代每个模式的完整文件夹结构。