【问题标题】:How to batch copy files based on a list (txt) in to another folder with same directory structure?如何将基于列表(txt)的文件批量复制到具有相同目录结构的另一个文件夹中?
【发布时间】:2021-10-22 05:44:57
【问题描述】:

我有一个根目录,其中包含超过 25,000 个文件。这些文件位于不同的子目录中。

我还有一个包含 4300 行的文本文件,每一行都是目录中某个文件的绝对路径。如下所示,

c:\dir1\hat1.gif
c:\dir1\hat2.gif
c:\dir1\dir2\hat1.gif
c:\dir1\dir2\hat2.gif
c:\dir1\dir3\cat.zip
c:\dir1\dir3\banana.exe

我还有另一个根目录,它是原始根目录结构的副本,但所有目录都是空的。

我想将文本文件中列出的所有文件复制到空目录中,并将所有复制的文件放在相应的子目录中。

如果我使用以下批处理文件,我会不断收到文件覆盖提示,因为它没有将文件复制到正确的目录。

@echo off
set dst_folder=c:\DSTN2
for /f "tokens=*" %%i in (USEDFILES.txt) DO (
    xcopy /S/E "%%i" "%dst_folder%"
)

如何修改它以便将文件复制到正确的目录?

【问题讨论】:

  • 这个问题和the one you asked earlier有什么区别,现在已经删除了。当您尝试在这些 cmets 中实施提供给您的建议时发生了什么?如果您表现出无视评论员建议的行为模式,他们将来不太可能为您提供帮助。将"%dst_folder%" 更改为"%dst_folder%%%~pi"
  • 谢谢,看来它成功了。我设法创建重复的文件夹结构,编辑现有问题只会导致混乱,因为最初的答复不会符合问题。
  • @dij,我们真的希望您将所有问题都保留在一个问题中,而不是删除它。当您编辑问题时,每个人都可以看到您所做的编辑。问题下方的评论也可以删除。在您提出任何其他问题之前,请按照您加入 StackOverFlow 时的要求发送 tour。另请阅读How to Ask 一个好问题,并始终提供您正在使用的代码和输入示例的minimal reproducible example

标签: windows batch-file


【解决方案1】:

由于您要从列表中复制特定文件,因此如果您希望目录结构存在于类似的文件夹结构中,则需要确保目标目录结构存在。因此,使用FOR 命令修饰符的强大功能,您只能从文件列表中的文件名中获取文件路径。您将使用该修饰符创建目标目录,并将其用作XCOPY 命令的目标。

我冒昧地为您使用的所有代码提供了最佳实践。

@echo off

set "dst_folder=c:\DSTN2"
for /f "usebackq delims=" %%G in ("USEDFILES.txt") DO (
    mkdir "%dst_folder%%%~pG" 2>NUL
    xcopy "%%~G" "%dst_folder%%%~pG"
)

【讨论】:

  • 请注意,此任务无需使用MkDir/MD,因为xcopy.exe 将在树不存在时创建它,(取决于权限),只要目标目录有一个尾部反斜杠。幸运的是,%~p 扩展已经带有一个前导和尾随反斜杠,因此只需使用 %SystemRoot%\System32\xcopy.exe(最佳实践)、源 "%%G" 和目标 "%dst_folder%%%~pG" 就足够了任务,假设%dst_folder% 值中的驱动器规范确实存在,(它不创建驱动器)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多