我有一个文件名列表,我想在一个文件夹中搜索这些文件并将它们复制到另一个文件夹中,保存子目录,因为它是
例如
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
要搜索的文件名列表将位于文本文件中。
答案 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