如何在PowerShell中使用Copy-Item命令覆盖文件

26
我想复制一个文件夹的内容,但其中有两个文件我想排除在外。其余所有内容都应该被复制到新位置,新位置上已经存在的内容应该被覆盖。
这是我的脚本。如果我的目标文件夹为空,它可以正常工作,但如果我有文件和文件夹,它就无法覆盖它们。
$copyAdmin = $unzipAdmin + "/Content/*"
$exclude = @('Web.config','Deploy')
Copy-Item  -Path $copyAdmin -Destination $AdminPath -Exclude $exclude -Recurse -force

2
为什么不使用Robocopy呢? - vonPryz
这应该可以运行...有错误信息吗?如果这是部署脚本的一部分,可能在复制后文件被锁定了(这就是如果IIS/网站已启动会发生的情况)。 - Raf
1
@raf,没有错误。如果我手动复制粘贴,一切都正常,旧文件和文件夹会被手动覆盖。但是使用PowerShell脚本时,只有目标文件夹为空时才能正常工作,否则它将不会复制web.config文件和部署文件夹。但是例如,如果目标文件夹中已经有内容,则复制命令只会复制那些在目标文件夹中缺失的文件。 - srk786
1
你的脚本中 $AdminPath 定义正确了吗? - Raf
3个回答

29

根据我的理解,Copy-Item -Exclude 命令是正确的。通常我会先获取第一个,然后再进行操作。那么,使用 Get-Item 呢?

Get-Item -Path $copyAdmin -Exclude $exclude |
Copy-Item  -Path $copyAdmin -Destination $AdminPath -Recurse -force

随时乐意帮忙。 - Daniel Lindegaard
你为什么加上了“-Recurse”? - Ismoh
1
如果您要复制的文件夹中有任何子文件夹,使用该命令时将不会复制子文件夹。 - Daniel Lindegaard

6

Robocopy被设计用于可靠的复制,具有许多复制选项,文件选择重启等功能。

/xf用于排除文件,/e用于子目录:

robocopy $copyAdmin $AdminPath /e /xf "web.config" "Deploy"

可能不是原帖作者想要的,但这对我很有帮助 :-) - Rob
将路径中的文件从一个位置复制到另一个位置($copyAdmin $AdminPath),/xf开关定义要排除的文件,例如web.configDeploy - clD

4

如何调用.NET Framework方法?

您可以使用它们实现任何功能... :

[System.IO.File]::Copy($src, $dest, $true);
$true参数会覆盖原有内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接