蝙蝠文件以递归方式遍历并查找某些文件类型

我试图递归遍历目录并在其中查找exe文件。

这是文件夹结构

C:\MyCave\iso\SDG\cmpdir

---------------\FolderA
------------------abc.txt
---------------\FolderB
------------------def.exe
---------------\FolderC
------------------ghi.dll

以下是我的蝙蝠sin。

set f="C:\MyCave\iso\SDG\cmpdir\test-recur"
for /r %%f in ("*.exe") do if exist %%f echo %%f

尽管它可以正常工作并列出C:\MyCave\iso\SDG\cmpdir中的exe文件,但我想列出仅存在于C:\MyCave\iso\SDG\cmpdir\test-recur目录中的exe文件。

这是我当前的输出。

C:\MyCave\iso\SDG\cmpdir>exeRecur.bat

C:\MyCave\iso\SDG\cmpdir>set f="C:\MyCave\iso\SDG\cmpdir\test-recur"

C:\MyCave\iso\SDG\cmpdir>for /R %f in ("*.exe") do if exist %f echo %f

C:\MyCave\iso\SDG\cmpdir>if exist C:\MyCave\iso\SDG\cmpdir\cp.exe echo C:\MyCave\iso\SDG\cmpdir\cp.exe
C:\MyCave\iso\SDG\cmpdir\cp.exe

C:\MyCave\iso\SDG\cmpdir>if exist C:\MyCave\iso\SDG\cmpdir\dirB\Abcd.exe echo C:\MyCave\iso\SDG\cmpdir\dirB\Abcd.exe
C:\MyCave\iso\SDG\cmpdir\dirB\Abcd.exe

C:\MyCave\iso\SDG\cmpdir>if exist C:\MyCave\iso\SDG\cmpdir\test-recur\2\def.exe echo C:\MyCave\iso\SDG\cmpdir\test-recur\2\def.exe
C:\MyCave\iso\SDG\cmpdir\test-recur\2\def.exe

C:\MyCave\iso\SDG\cmpdir>if exist C:\MyCave\iso\SDG\cmpdir\wspace\defg.exe echo C:\MyCave\iso\SDG\cmpdir\wspace\defg.exe
C:\MyCave\iso\SDG\cmpdir\wspace\defg.exe

我知道某个地方有一个小错误。需要您的帮助来解决它。


根据Gerhard和sst的回答,我已经像这样修改了脚本。

set rootFolder=%1
set destFolder=%2
for /r %rootFolder% %%f in ("*.exe") do if exist %%f move %%f %destFolder%

我正在像这样将命令行参数传递给bat ...

exeRecur.bat "C:\MyCave\iso\SDG\cmpdir\test-recur" "C:\MyCave\iso\SDG\cmpdir\dirA"

像这样避免对路径进行硬编码。

致谢

n6977014 回答:蝙蝠文件以递归方式遍历并查找某些文件类型

您忘记指定FOR /R的'root path'参数,因此它将从当前目录开始枚举。

您应该为环境变量使用其他名称,以避免与FOR的参数%%f混淆。

set "RootFolder=C:\MyCave\iso\SDG\cmpdir\test-recur"
for /r "%RootFolder%" %%f in (*.exe) do echo %%f

您还应该使用set命令的扩展语法:set "var=value",并在需要引用的地方使用"%var%"

由于您使用的是通配符*.exe,因此if exist中不需要FOR /R,因为它只会枚举现有文件。

,

好,所以您要设置一个变量:

set f="C:\MyCave\iso\SDG\cmpdir\test-recur"

首先,设置单字符变量是一种不好的做法,但更重要的是用双引号将其包装的方式。它应该从变量的开头到值的结尾。

set "f=C:\MyCave\iso\SDG\cmpdir\test-recur"

但是真正的问题是,您永远不会告诉for /r循环在哪里递归进行搜索。

set "mypath=C:\MyCave\iso\SDG\cmpdir\test-recur"
for /r "%mypath%" %%f in (*.exe) do echo %%~f
本文链接:https://www.f2er.com/3147361.html

大家都在问