![如何将文件从一个文件夹复制到具有不同层次结构的另一个文件夹?](https://linux22.com/image/1605749/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E5%A4%8D%E5%88%B6%E5%88%B0%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我有许多文件存储在深层层次结构中,如下所示:
F:\Files\FX\Water\APX\Build\Setup\myfile.mp4
F:\Files\FX\1\2\3\4\otherfile.mp4
我想将它们复制到具有一个嵌套层但在较低文件夹级别的另一个驱动器中:
F:\Files\FX\Water\MICROSOFT\APX\Build\Setup\myfile.mp4
F:\Files\FX\1\MICROSOFT\2\3\4\otherfile.mp4
因此,如您所见,我无法进行简单的复制粘贴。是否有可以在 cmd 或 PowerShell 上运行的命令,可以让我一次复制所有文件,覆盖目标文件?
我在使用 Windows 10 Pro。
答案1
因此,如您所见,我无法进行简单的复制粘贴。是否有可以在 cmd 或 powershell 上运行的命令,或者甚至可以让我一次复制所有文件并覆盖目标文件的应用程序?
也许我没有完全理解你的问题,但你应该能够做类似的事情:
robocopy F:\Files\FX\Water\APX\Build\Setup F:\Files\FX\Water\MICROSOFT\APX\Build\Setup *.*
目标目录不需要存在。机器人复制应该在 Windows Vista 或更高版本上可用,并具有复制子目录的选项(根据需要)。
答案2
有几种方法可以做到这一点:1)在 Powershell 中
Copy-Item -Path <SourcePath> -Destination <DestinationPath> # -force if already existing at the target
2)使用 Cmd
Copy <SourcePath> <DestinationPath>
请注意,该文件从父文件夹继承了目标的权限。
答案3
您可以使用 Robocopy 轻松完成此操作。
- 打开命令提示符窗口
- 运行以下命令:
robocopy /e f:\files\fx\water\apx\build\setup f:\files\fx\water\microsoft\apx\build\setup
/e
必须使用此选项才能包含源文件夹中存在的任何子文件夹(或空子文件夹)。如果没有此开关,Robocopy 将仅复制文件并将忽略子文件夹。通常最好将其包括在内。- 不需要添加,
"."
因为 Robocopy 默认复制所有文件,所以这将是多余的。
更新:
OP 已更新他的问题,包括对源路径文件夹通配符的要求。
Robocopy 不支持源路径文件夹通配符,因为它支持的唯一通配符是文件名或文件扩展名中使用的通配符。
由于这个限制,Robocopy 无法帮助 OP。需要使用替代脚本解决方案进行回答。
答案4
这可以在电源外壳。但我们可能需要一些澄清。
这个命令列出了我们想要复制的文件吗?
gci F:\files\Fx *.mp4 -recurse | select fullname
如果没有,您需要提供详细信息以便我们选择所需的文件。
一旦你拥有了权利,你就可以构建新的路径:
gci F:\files\Fx *.mp4 -recurse | Foreach{
$folders = $_.Fullname.split('\')
$NewPath = $Folders[0..3] + 'Microsoft' + $Folders[4..($Folders.Count-1)]
$NewPath -join '\'
}
如果这些路径看起来正确,则添加复制项目命令:
gci F:\files\Fx *.mp4 -recurse | Foreach{
$folders = $_.Fullname.split('\')
$NewPath = $Folders[0..3] + 'Microsoft' + $Folders[4..($Folders.Count-1)]
$NewPath = $NewPath -join '\'
Copy-Item $_.FullName $NewPath
}