【问题标题】:How to overwrite files with Copy-Item in PowerShell如何在 PowerShell 中使用 Copy-Item 覆盖文件
【发布时间】:2020-09-04 05:26:53
【问题描述】:

我正在尝试复制文件夹的内容,但我想排除两个文件。应将所有内容的其余部分复制到新位置,并覆盖该新位置上的现有内容。

这是我的脚本。如果我的目标文件夹为空,它可以正常工作,但如果我有文件和文件夹,它不会覆盖它们。

$copyAdmin = $unzipAdmin + "/Content/*"
$exclude = @('Web.config','Deploy')
Copy-Item  -Path $copyAdmin -Destination $AdminPath -Exclude $exclude -Recurse -force

【问题讨论】:

  • 为什么不改用Robocopy
  • 这应该可以工作..是否有错误消息?如果这是部署脚本的一部分,则文件在复制后可能会被锁定(如果 IIS/Website 启动就会发生这种情况)。
  • @raf 没有错误。如果我手动复制粘贴而不是一切正常,旧文件和文件夹会被手动覆盖。但是使用 powershell 脚本,它仅适用于目标文件夹为空,而不是复制 web.config 文件和部署文件夹。但是比如说,如果我已经在目标文件夹中有内容,那么复制命令只会复制那些在目标文件夹中丢失的文件
  • 您的脚本中是否正确定义了$AdminPath

标签: powershell


【解决方案1】:

据我了解Copy-Item -Exclude 那么你做对了。我通常做的事情,获得​​第一,然后再做,那么使用Get-Item怎么样

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

【讨论】:

  • 随时乐意提供帮助。
  • 为什么要加“-Recurse”?
  • @Ismoh 如果您想要复制的文件夹中有任何子文件夹。如果你使用它,它不会复制子文件夹。
【解决方案2】:

Robocopy 专为可靠复制而设计,具有许多复制选项、文件选择重启等。

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

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

【讨论】:

  • 可能不是 OP 想要的,但它帮助了我 :-)
  • 从一个路径复制到另一个路径 ($copyAdmin $AdminPath) /xf 开关定义要排除哪些文件,即 web.configDeploy
【解决方案3】:

调用 .NET Framework 方法怎么样?

你可以用它们做任何事...:

[System.IO.File]::Copy($src, $dest, $true);

$true 参数使其覆盖。

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2014-06-06
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2012-09-01
    相关资源
    最近更新 更多