4

我似乎永远无法做到这一点。

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

4

1 回答 1

9

只需使用robocopy命令。它为这种事情而设计的。

robocopy $source $destination /E

它随 Windows 7 一起提供,所以它是一个内部命令,所以它仍然是一种“Powershell”方式,恕我直言,但如果你想使用复制命令,那么你非常接近,但你当前的实现会抓取source文件夹并将它在里面target(即结果是C:\target\source\files,不是C:\target\files)。当你想让 insidetarget看起来像 inside 时source,你需要这样做:

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

注意*,这会抓取文件夹的内容source如果你想target先被清除,就rm -r -fo C:\target\*在复制之前做。

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

于 2012-07-27T20:37:52.840 回答