我似乎无法做到这一点。
我有一个现有的文件夹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
,但如果它尚不存在则会正确复制。不知道这里发生了什么。有什么建议吗?
答案 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。