返回
在子文件夹中批量复制文件:文本文件到新文件夹
windows
2024-03-19 20:56:50
在子文件夹中批量复制文本文件中列出的文件到新文件夹
问题概述
我们遇到了一个棘手的问题,我们需要从一个文本文件中复制 500 个图像文件,文件名每行一个。这些文件分散在外部硬盘驱动器的所有子文件夹中,我们需要将它们全部复制到本地驱动器。
参考脚本分析
最初,我们尝试使用以下参考脚本:
pushd D:\move_script
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\SourceFolder\%%a" ".\DestinationFolder"
popd
但它存在一个主要限制:它只能在一个指定的源文件夹中搜索文件。
解决方案:使用通配符进行递归搜索
为了解决这个问题,我们需要在源文件夹路径中使用通配符 "**",使其能够递归搜索所有子文件夹。修改后的脚本如下:
pushd D:\move_script
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\**\%%a" ".\DestinationFolder"
popd
如何使用此脚本
- 将文本文件(包含要复制的文件名)保存在 "D:\move_script" 目录中。
- 确保 ".\DestinationFolder" 目录存在于 "D:\move_script" 中。
- 运行命令提示符,并导航到 "D:\move_script" 目录。
- 执行以下命令:
pushd D:\move_script
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\**\%%a" ".\DestinationFolder"
popd
该脚本将遍历外部硬盘驱动器上的所有子文件夹,并在 ".\DestinationFolder" 中复制所有匹配的文件。
常见问题解答
- 我可以在不同的驱动器上运行此脚本吗?
是的,您可以将 "D:\move_script" 替换为您要运行脚本的驱动器。
- 我可以排除某些文件夹吗?
是的,您可以在源文件夹路径中使用 "**" 通配符排除文件夹。例如,要排除 ".\ExcludedFolder",可以使用以下命令:
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\**\%%a" ".\DestinationFolder" /EXCLUDE:\ExcludedFolder
- 我可以将文件复制到多个目的地吗?
是的,您可以使用以下命令将文件复制到多个目的地:
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\**\%%a" ".\DestinationFolder1" ".\DestinationFolder2"
- 我可以使用其他文件扩展名吗?
是的,您可以将 "%.txt" 替换为您要复制的文件的扩展名。例如,要复制 JPEG 文件,可以使用以下命令:
for /f "tokens=* delims=" %%a in ('type List.txt') do xcopy /hrkvy ".\**\%%a.jpeg" ".\DestinationFolder"
- 我可以使用变量吗?
是的,您可以使用变量来动态调整脚本。例如,要使用 "list.txt" 作为文本文件名称,可以使用以下命令:
set text_file=list.txt
for /f "tokens=* delims=" %%a in ('type %text_file%') do xcopy /hrkvy ".\**\%%a" ".\DestinationFolder"
结论
使用通配符 "**",我们可以轻松地在子文件夹中批量复制文件。通过使用本指南,您可以轻松地复制大量文件,而无需手动搜索和复制。