Batch file 在某些文件夹中使用for循环查找文件

Batch file 在某些文件夹中使用for循环查找文件,batch-file,for-loop,Batch File,For Loop,我正在尝试从映射驱动器中查找ugraf.exe文件。下面的命令在当前驱动器上的所有文件夹中循环查找文件-ugraf.exe 我想在从ugnx*开始的文件夹中查找ugraf.exe,该文件夹仅存在于ugii文件夹中 有人能帮我吗?您可以使用findstr命令将结果导入管道: ... | findstr /I "O:\ugn" | findstr /I "ugii\ugraf.exe" /I代表不区分大小写。 findstr/io:\ugn检查主目录是否确实

我正在尝试从映射驱动器中查找ugraf.exe文件。下面的命令在当前驱动器上的所有文件夹中循环查找文件-ugraf.exe

我想在从ugnx*开始的文件夹中查找ugraf.exe,该文件夹仅存在于ugii文件夹中


有人能帮我吗?

您可以使用findstr命令将结果导入管道:

... | findstr /I "O:\ugn" | findstr /I "ugii\ugraf.exe"
/I代表不区分大小写。 findstr/io:\ugn检查主目录是否确实是ugnxxx。
findstr/I ugii\ugraf.exe确保您只获取ugii目录中的内容。

您可以使用findstr命令通过管道传输结果:

... | findstr /I "O:\ugn" | findstr /I "ugii\ugraf.exe"
/I代表不区分大小写。 findstr/io:\ugn检查主目录是否确实是ugnxxx。
findstr/I ugii\ugraf.exe确保您只获取ugii目录中的目录。

除非在O的根目录中有很多大目录:其名称不以字符串ugnx开头,似乎只需搜索文件,然后在返回的路径字符串中检查其输出的ugnx和ugii目录就更简单了:

@%__AppDir\\%where.exe/R O:\。ugraf.exe 2>NUL |%\uuuu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$ 您甚至可以使用Dir命令,而不是使用where.exe:

@目录/B/S/A:-DO:\ugraf.exe 2>NUL |%\uuu应用目录\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$ 如果您想从以下位置获取:

@For/F Delims=%%G在“%\uuu AppDir\uuuu%where.exe/R O:\”中。ugraf.exe 2>NUL |%\uuu AppDir\uuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 或者使用Dir命令而不是where.exe

@对于/F Delims=%%G In'Dir/B/S/A:-D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 如果ugnx*目录级别上O:根目录中的目录可能较大或较多,则只需从初始For/D循环传递该目录:

@对于/D%%G In O:\ungx*Do@For/F Delims=%%H In%%u AppDir\u%where.exe/R%%G ugraf.exe 2>NUL |%\u AppDir\u%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%H 或者使用Dir命令而不是where.exe

@对于O:\ungx*Do@For/F Delims=%%H In'Dir/B/S/A:-D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 或For/F循环:

@For/F Delims=%%G在'Dir/B/S/A:Do:\ungx*2^>NUL'Do@For/F Delims=%%H在'%\uu AppDir\uuuu%where.exe/R%%G ugraf.exe 2>NUL |%\uu AppDir\uuu%findstr.exe/I/R^O:\\ugnx*\\ugi\\ugraf\.exe$'Do@Echo%%H 再次使用Dir,而不是where.exe:

@For/F Delims=%G在Dir/B/S/A:Do:\ungx*2^>NUL'Do@For/F Delims=%H在Dir/B/S/A:%D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugi\\ugraf\.exe$'Do@Echo%%H
除非在O:的根目录中有很多大目录,其名称不以字符串ugnx开头,否则似乎只搜索文件更简单,然后在返回的路径字符串中检查其输出的ugnx和ugii目录:

@%__AppDir\\%where.exe/R O:\。ugraf.exe 2>NUL |%\uuuu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$ 您甚至可以使用Dir命令,而不是使用where.exe:

@目录/B/S/A:-DO:\ugraf.exe 2>NUL |%\uuu应用目录\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$ 如果您想从以下位置获取:

@For/F Delims=%%G在“%\uuu AppDir\uuuu%where.exe/R O:\”中。ugraf.exe 2>NUL |%\uuu AppDir\uuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 或者使用Dir命令而不是where.exe

@对于/F Delims=%%G In'Dir/B/S/A:-D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 如果ugnx*目录级别上O:根目录中的目录可能较大或较多,则只需从初始For/D循环传递该目录:

@对于/D%%G In O:\ungx*Do@For/F Delims=%%H In%%u AppDir\u%where.exe/R%%G ugraf.exe 2>NUL |%\u AppDir\u%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%H 或者使用Dir命令而不是where.exe

@对于O:\ungx*Do@For/F Delims=%%H In'Dir/B/S/A:-D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugii\\ugraf\.exe$'Do@Echo%%G 或For/F循环:

@For/F Delims=%%G在'Dir/B/S/A:Do:\ungx*2^>NUL'Do@For/F Delims=%%H在'%\uu AppDir\uuuu%where.exe/R%%G ugraf.exe 2>NUL |%\uu AppDir\uuu%findstr.exe/I/R^O:\\ugnx*\\ugi\\ugraf\.exe$'Do@Echo%%H 再次使用Dir,而不是where.exe:

@For/F Delims=%G在Dir/B/S/A:Do:\ungx*2^>NUL'Do@For/F Delims=%H在Dir/B/S/A:%D%%G\ugraf.exe 2>NUL |%\uu AppDir\uuuu%findstr.exe/I/R^O:\\ugnx*\\ugi\\ugraf\.exe$'Do@Echo%%H
对于O:\ungx*do pushd%~A中的/D%A,对于ugii中的/D/R%B,如果存在,则执行%%B\ugraf.exe echo/%B\ugraf.exe&popd@aschipfl,将行作为输出,似乎在第一个ugnx*的所有文件夹中循环:如果存在O:\ugnx100\nx10.24\..\fsnac3\ugii\ugraf.exe echo/O:\ugnx100\n
x10.24 \…\fsnac3\ugii\ugraf.exe在ugii中的/D/R%B中,括号内的字符串应该是全局的问题是什么?如果您将其中任何一个字符更改为?,它应该会修复该问题,例如u?ii,但是,您必须确保您更改的字符与另一个非必需目录不匹配。您还将收到命令echos;以cmd/Q的形式启动命令提示符,然后重试,或者在命令/块之前放置@符号…用于O:\ungx*中的/D%A和ugii中的/D/R%B,如果存在的话%%B\ugraf.exe echo/%~B\ugraf.exe和popd@aschipfl,将行作为输出,似乎在第一个ugnx*的所有文件夹中循环:如果存在O:\ugnx100\nx10.24\..\fsnac3\ugii\ugraf.exe echo/O:\ugnx100\nx10.24\..\fsnac3\ugii\ugraf.exe是否存在这样的问题:在ugii中的for/D/R%B中,括号内的字符串应该是一个glob?如果您将其中任何一个字符更改为?,它应该会修复该问题,例如u?ii,但是,您必须确保您更改的字符与另一个非必需目录不匹配。您还将收到命令echos;以cmd/Q启动命令提示符,然后重试,或在命令/块之前放置@符号…\and。字符在findstr中是特殊的。和。字符在findstr中是特殊的。是的,O驱动器上有大量的文件和文件夹。“我正在运行所有3个解决方案。O:驱动器上的文件和文件夹的数量不是我说的,”Experiator说。我故意说得很具体,速度这个问题只有在O:的根中有很多大树的情况下才会出现:与O:\ugnx*相邻。先穿过那些树是浪费时间的。因此,我为这些场景添加了一个额外的For/D和For/F选项。请随时测试它们的速度。您也可以尝试在这些示例中用Dir/B/S/A:-D%%G\ugraf.exe替换%\uuu-AppDir\uuu%where.exe/R%%G ugraf.exe,看看这是否对您更快捷,答案已更新。是的,O驱动器上有大量文件和文件夹。“我正在运行所有3个解决方案。O:驱动器上的文件和文件夹的数量不是我说的,”Experiator说。我故意说得很具体,速度这个问题只有在O:的根中有很多大树的情况下才会出现:与O:\ugnx*相邻。先穿过那些树是浪费时间的。因此,我为这些场景添加了一个额外的For/D和For/F选项。请随时测试它们的速度。您也可以尝试在这些示例中用Dir/B/S/A:-D%%G\ugraf.exe替换%\uuu-AppDir\uuuu%where.exe/R%%G ugraf.exe,看看是否对您更快捷,答案更新。
... | findstr /I "O:\ugn" | findstr /I "ugii\ugraf.exe"