ROBOCOPY - 将文件夹内容复制到单个文件夹

Art*_*hor 8 copy file batch-file robocopy

这是我做的一些代码:)

@echo off
set source="R:\Contracts\"
set destination="R:\Contracts\Sites\"
ROBOCOPY %source% %destination% *.srt *.pdf *.mp4 *.jpg /COPYALL /R:0 /S
for /r %source in (*) do @copy "%destination" .
Run Code Online (Sandbox Code Playgroud)

R:\ Contracts \中包含文件夹,其中包含文件.

我想将所有内容复制到R:\ Contracts\Sites \并展平文件夹结构.

一切都很好,但文件夹结构也很好.

谢谢

Gar*_*mel 10

你可以使用PowerShell one liner做到这一点.在这个例子中,我从所有子文件夹中过滤掉所有带有.txt扩展名的文件.然后将它们发送到Move-Item Cmdlet.

结合Cmdlets get-Childitem(简称GCI),-recurse,maby -filter,然后将结果传递给Move-Item Cmdlet.使用-WhatIf首先检查输出是否符合预期.

移至当前文件夹

get-Childitem -recurse -filter *.txt | Move-Item -WhatIf
Run Code Online (Sandbox Code Playgroud)

移动到另一个文件夹

get-Childitem -recurse -filter *.txt | Move-Item -Destination c:\temp -WhatIf
Run Code Online (Sandbox Code Playgroud)


dbe*_*ham 9

没有一个命令可以为您压缩层次结构; 你将不得不使用多个命令.它可以简单地通过使用FOR/R来遍历层次结构,再加上您选择的复制/移动命令(移动,复制,xcopy,robocopy).由于目标位于源层次结构中,因此需要IF以防止目标成为源.

在继续之前,您应该停下来思考如果多个源文件夹中出现相同的文件名会发生什么.您的目标文件夹中只能有一个版本.你能保证不存在重复的名字吗?如果没有,应该保留哪个文件?如何构造命令以保留所需的文件?这种复杂化可能就是为什么没有编写任何命令来简化层次结构.

这是与FOR/R解决方案集成的ROBOCOPY命令.

@echo off
set source="R:\Contracts"
set destination="R:\Contracts\Sites"

::Not sure if this is needed
::It guarantees you have a canonical path (standard form)
for %%F in (%destination%) do set destination="%%~fF"

for /r %source% %%F in (.) do if "%%~fF" neq %destination% ROBOCOPY "%%F" %destination% *.srt *.pdf *.mp4 *.jpg /COPYALL /R:0
Run Code Online (Sandbox Code Playgroud)

  • @ColeTrumbo - 没有很好地处理重复项.只有在您确信没有重复的文件名时,才应使用此解决方案.如果你运行上面的重复项,那么最后一个复制"wins". (2认同)