PowerShell复制项PathTooLongException

时间:2018-11-01 08:00:35

标签: powershell

我有一个PowerShell脚本,需要在其中以递归方式复制到文件夹,替换其中的所有文件:

Copy-Item -Path $source -Destination $destination -Recurse -Force -Verbose

由于目标文件夹中的某些文件的路径超过了260个字符,因此我得到了PathTooLongException。

我已经阅读了以下可能的解决方案:

  1. 使用robocopy
    • 我宁愿使用纯PowerShell
  2. 在注册表和组策略中启用长路径
    • 要求用户必须重新启动其控制台,我也更喜欢不更改用户的注册表。
  3. 为路径使用\\?\前缀

正如我所说,我宁愿不使用前两个,第三个解决方案(\\?\)对我来说应该没问题,但是实际上并没有复制文件。

执行时立即完成,并且不会从命令生成任何输出。结果,目标位置的文件不会被源文件替换。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

\\?\前缀使用Windows API的unicode版本,这需要使用LiteralPath参数而不是Path

Copy-Item -LiteralPath '\\?\C:\folder\subfolder' -Destination 'D:\folder'

UNC路径\\server\share\folder的语法略有不同\\?\UNC\server\share\folder

(与您没有特别关系,但是如果有人偶然发现此答案,以供将来参考)