如何使用 Windows 批处理文件从文本文件中的文件列表中递归复制文件?

如何使用 Windows 批处理文件从文本文件中的文件列表中递归复制文件?

父文件夹:根文件
夹 子文件夹 1:包含 12000 个文件,即 subfolder1\885.txt
子文件夹 2:包含 15000 个文件,即 subfolder2\882.txt

源文件列表names.ext包含 500 个不同名称:

882.txt
550.txt
990.txt
300.txt

如何让我的FOR循环读取 names.ext 的第一行,搜索该文件,找到后复制它,读取 names.ext 的第二行并重复。

@ECHO ON
SET RootDir=E:\Source
SET CopyDir=E:\Destination
IF NOT EXIST "%CopyDir%" MD "%CopyDir%"

SET CopyFname=882.txt '(Need to cater more file names rather than one such as 882.txt, 992.txt, 555.txt etc)'

FOR /D %%A IN ("%RootDir%\*") DO FOR %%B IN ("%%~A\%CopyFname%") DO ECHO F | XCOPY /Y /F "%%~B" "%CopyDir%\"
GOTO EOF

答案1

@ECHO OFF

SET "_RootDir=E:\Source"
SET "_CopyDir=E:\Destination\"
SET "_LstFile=E:\Source\Listnames.log"

TITLE <NUL & TITLE %~nx0 && 2>nul >nul MKdir "%_CopyDir%"

FOR /F Tokens^=*Delims^= %%# IN ('type "%_LSTFILE%"')DO (
FOR /F Tokens^=*Delims^= %%I IN ('^<con: "%__APPDIR__%WHERE.exe" /R "%_ROOTDIR%" "%%~#"
')DO "%__APPDIR__%XCopy.exe" /Y /F /V "%%~I" "%_CopyDir%"|"%__APPDIR__%FINDSTR.EXE" /V ")")

  1. 逐行读取一个文件并获取在根文件夹及其子文件夹中查找的文件的名称:
FOR /F Tokens^=*Delims^= %%# IN ('type "%_LSTFILE%"')DO....
  1. 为了有效地搜索上一个循环中读取的当前行上列出的文件,请使用%%~#作为参数传递给where命令以及用于递归搜索和在%_RootDir%文件夹中搜索的标志:
..')DO FOR /F Tokens^=*Delims^= %%I IN ('"%__APPDIR__%WHERE.exe" /R %_ROOTDIR% "%%~#"
  1. 使用For /F + WHERE /T循环输出作为你的参数XCOPY,从而将找到的文件(找到的位置)复制到其目标文件夹“%_CopyDir%\”:
..')do XCOPY /Y /F /V "%%~i" "%_CopyDir%\"

相关内容