我需要将文本文件中列出的几个文件复制到新文件夹中,我不是计算机奇才,所以请温柔一点并简化它:)
(文件名类似于201609-ABCD.pdf)
我认为下面可以做到这一点,但不知道如何运行它。
{ 迭代文本文件:
for /f "delims=" %%L in (foo.txt) do 复制文件:
复制“%%L”新文件夹完成:
对于/f“delims=”%%L在(foo.txt)中复制“%%L”new_folder}
答案1
- 如果源文件夹,目标文件夹,以及文件列表位于同一路径下:
FileList: D:\Files\FileList.txt
SourceFolder: D:\Files\SourceFolder
DestinationFolder: D:\Files\DestinationFolder
和文件列表仅包含文件的名称和扩展名:
File1.txt
File2.pdf
File3.docx
File4.jpg
那么你的脚本是:
@echo off
pushd D:\Files
for /f "tokens=* delims=" %%a in ('type FileList.txt') do xcopy /hrkvy ".\SourceFolder\%%a" ".\DestinationFolder"
popd
pause
- 如果源文件夹,目标文件夹,以及文件列表位于同一路径下:
FileList: D:\Files\FileList.txt
SourceFolder: D:\Files\SourceFolder
DestinationFolder: D:\Files\DestinationFolder
和文件列表包含文件的完整路径:
D:\Files\SourceFolder\File1.txt
D:\Files\SourceFolder\File2.jpg
D:\Files\SourceFolder\File3.docx
那么你的脚本是:
@echo off
pushd D:\Files
for /f "tokens=* delims=" %%a in ('type FileList.txt') do xcopy /hrkvy "%%a" ".\DestinationFolder"
popd
pause
- 如果目标文件夹,以及文件列表位于同一路径下,并且源文件夹是变量:
FileList: D:\Files\FileList.txt
SourceFolder: %SourceFolder%
DestinationFolder: D:\Files\DestinationFolder
和文件列表仅包含文件的名称和扩展名:
File1.txt
File2.jpg
File3.docx
那么你的脚本是:
@echo off
pushd D:\Files
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type FileList.txt') do xcopy /hrkvy "%SourceFolder%\%%a" ".\DestinationFolder"
popd
pause
- 如果目标文件夹,以及文件列表位于不同的路径下:
FileList: D:\Files\FileList.txt
DestinationFolder: C:\DestinationFolder
和文件列表指向不同位置的文件:
D:\Files\File1.txt
C:\WorkFiles\File2.jpg
E:\File3.docx
那么你的脚本是:
@echo off
for /f "tokens=* delims=" %%a in ('type "D:\Files\FileList.txt"') do xcopy /hrkvy "%%a" "C:\DestinationFolder"
pause
- 如果目标文件夹,以及文件列表位于不同的路径下,并且源文件夹是变量:
FileList: D:\Files\FileList.txt
SourceFolder: %SourceFolder%
DestinationFolder: C:\DestinationFolder
和文件列表仅包含文件的名称和扩展名:
File1.txt
File2.jpg
File3.docx
那么你的脚本是:
@echo off
set /p SourceFolder=Enter the path of source folder and press 'Enter':
cls
for /f "tokens=* delims=" %%a in ('type "D:\Files\FileList.txt"') do xcopy /hrkvy "%SourceFolder%\%%a" "C:\DestinationFolder"
pause
更新:
要在 OneDrive 子文件夹中递归查找源文件:
@echo off
pushd D:\Missing Papers
for /f "tokens=* delims=" %%a in ('type MissingPapers.txt"') do (
for /f "tokens=* delims=" %%b in ('dir /b /s "%OneDrive%" ^| find /i "%%a"') do
xcopy /hrkvy "%%b" ".\Searched out"
)
)
pause
将其粘贴到
.txt
文件中并将其扩展名重命名为.cmd
并运行它。如果您没有源目录的读取权限,或者没有目标目录的写入权限,请以管理员身份运行该脚本。
不要忘记用真实的文件路径替换示例。
答案2
根据@NetwOrchestration的回答,我使用 robocopy 而不是 xcopy 取得了更大的成功。Robocopy 似乎更可靠,并且具有简单的内置功能,只需使用文件名即可将文件从源传输到目标。请参阅这篇文章来了解我的意思。
这仅在文件列表只有文件名而没有路径时才有效。Robocopy 仅获取文件名,并在您提供的源文件夹中查找它。因此,包含文件列表的 .txt 文件必须如下所示:
MyFile1.bin
MyFile2.txt
MyFile4.doc
我的 .bat 解决方案的代码,它允许您将路径传递给 .txt,并将文件列表、源文件夹和目标文件夹作为参数传递给它:
@ECHO off
SET FileListTxt=%~1
SET SourceFolder=%~2
SET DestinationFolder=%~3
for /f "tokens=* delims=" %%a in ('type "%FileListTxt%"') do robocopy "%SourceFolder%" "%DestinationFolder%" "%%a"
ECHO DONE COPYING FILES IN %FileListTxt% FROM %SourceFolder% TO %DestinationFolder%