返回

在子文件夹中批量复制文件:文本文件到新文件夹

windows

在子文件夹中批量复制文本文件中列出的文件到新文件夹

问题概述

我们遇到了一个棘手的问题,我们需要从一个文本文件中复制 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

如何使用此脚本

  1. 将文本文件(包含要复制的文件名)保存在 "D:\move_script" 目录中。
  2. 确保 ".\DestinationFolder" 目录存在于 "D:\move_script" 中。
  3. 运行命令提示符,并导航到 "D:\move_script" 目录。
  4. 执行以下命令:
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"

结论

使用通配符 "**",我们可以轻松地在子文件夹中批量复制文件。通过使用本指南,您可以轻松地复制大量文件,而无需手动搜索和复制。