在powershell中保留文件夹结构的同时复制文件的正确方法是什么?

时间:2012-07-27 20:06:30

标签: powershell copy

我似乎无法做到这一点。

我有一个现有的文件夹c:\MyApps\Websites\MySite,其中已经有一个现有的网站。我已经下载了位于c:\temp\MySite\artifacts下的最新位。

当我尝试运行此

$source "c:\temp\MySite"
$destination "c:\MyApps\Websites\MySite"
copy-item $source $destination -recurse -force

如果c:\MyApps\Websites\MySite已经存在,那么它会尝试将其放入c:\MyApps\Websites\MySite\artifacts,但如果它尚不存在则会正确复制。不知道这里发生了什么。有什么建议吗?

1 个答案:

答案 0 :(得分:9)

只需使用robocopy命令即可​​。对于这种事情,设计

robocopy $source $destination /E

它随Windows 7一起提供,所以它是一个内部命令,所以它仍然是一个'Powershell'方式,imho,但如果你想使用copy命令,那么你非常接近,但是你当前的实现抓住了source文件夹并将其放在target内(即结果为C:\target\source\files,而不是C:\target\files)。当你想让target的内部看起来像source的内部时,你需要这样做:

cp C:\source\* C:\target -r -fo

请注意*,这会抓取source文件夹的内容。如果您希望首先清除target,请在复制前执行rm -r -fo C:\target\*

Powershell无法处理长路径,因此如果您有长文件名或深层文件夹,则无论如何都需要使用robocopy。