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

什么';在powershell中保留文件夹结构的同时复制文件的正确方法是什么?,powershell,copy,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
,其中已运行一个现有网站。我已经下载了位于
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
,但如果它还不存在,它会正确复制它。不知道这里发生了什么。有什么建议吗?

只需使用
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

请注意
*
,这将获取
源文件夹的内容。如果希望先清除
目标文件夹,只需在复制之前执行
rm-r-foc:\target\*


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

这不会同步文件夹,是吗?换句话说,如果目标目录中存在文件,但源目录中不存在文件,它会将其删除吗?@Micah删除目标目录中不存在的内容urce,你必须发出
/PURGE
标志。而且,
/MIR
相当于
/E/PURGE
。你可以通过发出
机器人复制/?
来查看更多信息。你这辈子都在哪里?我对答案投了赞成票,因为它太棒了,但我仍然想知道如何在powershell中做到这一点Y