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