2012-07-27 53 views
4

我永远无法得到这个权利。在PowerShell中保留文件夹结构的同时复制文件的正确方法是什么?

我有一个现有的文件夹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,但如果它不存在,它正确地将其复制。不知道这里发生了什么。有什么建议么?

回答

9

只需使用robocopy命令。这是设计这种事情。

robocopy $source $destination /E

它随Windows 7,所以它是一个内部命令,所以它仍然是一个“Powershell的”的方式,恕我直言,但如果你想使用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。

+0

这不同步文件夹呢?换句话说,如果文件存在于目标目录中,但不是源目录,它会删除它们吗? – Micah 2012-07-27 20:47:18

+1

@Micah要删除目标中不在源代码中的东西,必须发出'/ PURGE'标志。另外,'/ MIR'相当于'/ E/PURGE'。您可以通过发布'robocopy /?'查看更多信息。 – SpellingD 2012-07-27 20:52:47

+0

Holy sh * tballs Robocopy!你去过哪里?我是upvoting的答案,因为它是真棒,但我仍然想知道如何做到这一点powershell的方式.. – Micah 2012-07-27 20:56:57

相关问题