我在一个非常复杂的文件夹结构中有大量文件(45,000 多个)。我提取了约 13,000 个文件的子集及其路径(相对于根文件夹),我想将其与原始文件夹路径一起复制。
尽管我已经彻底搜索过,但我找不到使用 xcopy 或 robocopy 来做我想做的事情的方法。我可以轻松地为列表中的每个条目创建一个批处理文件,其中包含一个复制命令。但是,我找不到任何 x/robocopy 开关或开关组合,它们将从我的源文件生成目标中的文件夹路径,例如:
xcopy dir1\dir2\dir3\file.txt copy_folder /<some switches>
或者
xcopy dir1\dir2\dir3\file.txt copy_folder\dir1\dir2\dir3\file.txt /<some switches>
dir1\dir2\dir3
如果文件夹下不存在路径,我希望它创建路径并在那里copy_folder
放置一个副本file.txt
。我明白,在 Linuxcp --parent
上正是这样做的。
欢迎就实现此目标的最佳方法提出任何建议!
如果文件夹不存在,XCOPY 将创建文件夹,但它首先会提示询问目标是文件还是目录。
因此,您可以将 F 响应通过管道传递给 XCOPY 命令,这样命令就不会暂停。
如果您的列表中有重复项,则使用该
/Y
选项 - 您不希望 XCOPY 命令提示询问是否要覆盖。如果路径确实存在,则需要将 stderr 重定向到 nul,在这种情况下,右侧可能先于左侧完成,导致左侧将以下错误消息打印到 stderr -
The process tried to write to a nonexistent pipe.
重定向隐藏了不需要的错误消息。另一种选择是在执行 XCOPY 之前首先创建目标路径。如果路径已经存在,只需将 stderr 重定向到 null 即可避免看到错误消息。
无论使用哪种解决方案,如果列表中的路径包含驱动器号,则需要使用
"copyFolder%%~pnxF"
而不是"copyFolder\%%~F"
. 请注意,~p
修饰符包括前导\
.