PowerShell 复制项 PathTooLongException

akr*_*abi 5 powershell

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

Copy-Item -Path $source -Destination $destination -Recurse -Force -Verbose
Run Code Online (Sandbox Code Playgroud)

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

我已阅读过这些可能的解决方案:

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

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

当它执行时,它会立即完成,并且不会生成命令的输出。因此,目标中的文件不会被源中的文件替换。

有任何想法吗?

Jam*_* C. 4

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

Copy-Item -LiteralPath '\\?\C:\folder\subfolder' -Destination 'D:\folder'
Run Code Online (Sandbox Code Playgroud)

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

(与您没有特别相关,但如果有人偶然发现这个答案,供将来参考)