在Windows中,需要编写批处理命令来递归搜索文件夹

时间:2014-04-28 21:10:51

标签: batch-file

我有一个文件名列表,我想在一个文件夹中搜索这些文件并将它们复制到另一个文件夹中,保存子目录,因为它是

例如

C:\test |
 +---folder1 | test2.txt | test3.txt |
 +---folder2 | test4.txt | test5.txt |
 ---folder3 test6.txt

这里,如果我的文件列表是test3.txt,text5.txt,test6.txt(这些甚至可能是100个文件名)

然后批处理命令应递归搜索C:\ test文件夹并单独创建另一个文件夹,如下所示。

C:\testout |
+---folder1 | test3.txt 
+---folder2 | test5.txt 
---folder3 test6.txt

要搜索的文件名列表将位于文本文件中。

1 个答案:

答案 0 :(得分:0)

这与你的要求相似,而且比你要求的代码要简单得多。

它采用file.txt中的文件名并将其复制到"d:\testout\test\..."并复制目录结构。

当它完成时,如果你不想要额外的test文件夹,只需要拖放。

如果您的文件有额外的扩展名,则可能存在误报 例如,test2.txt.exe会被误认为是test2.txt,也会被复制。

@echo off
for /f "usebackq delims=" %%a in ("file.txt") do (
for /r "d:\test" %%b in ("%%a*") do xcopy "%%b" "d:\testout\%%~pb" /s
)
pause

编辑:加快网络访问的代码 - 未经测试

@echo off
pushd "\\server\share" || goto :EOF
dir /b /s /a-d >"%temp%\filelist.tmp"
del "%temp%\filelist2.tmp" 2>nul
for /f "usebackq delims=" %%a in ("c:\folder\file.txt") do (
   findstr /i /e /c:"%%a" "%temp%\filelist.tmp" >>"%temp%\filelist2.tmp"
)
for /f "usebackq tokens=1,* delims=:" %%b in ("%temp%\filelist2.tmp") do (
   xcopy "%%b:%%c" "d:\testout\%%~pc" 
)
del "%temp%\filelist.tmp" "%temp%\filelist2.tmp" >nul
popd
pause