递归复制长文件名的文件夹(超过260个字符)

问题描述 投票:0回答:2

我正在尝试自动复制驱动器。许多驱动器的文件名很长,导致过程中途失败。

我使用了这个复制命令,但这两个命令都失败了。

XCOPY /E c:\folder-you-want-to-copy\*.* C:\destinationfolder\ 

copy-item -Path K:\* -Destination E:\ -Recurse -Force

Copy-Item :指定的路径、文件名或两者都太长。完全限定文件名必须少于 260 个字符,目录名必须少于 260 个字符。

然后我尝试了SO帮助这里的power shell这里的SO帮助,但是我的机器的Win 10策略中缺少启用选项

如何将文件从一个驱动器递归复制到具有长文件名/路径的另一个驱动器?

powershell xcopy max-path
2个回答
4
投票

robocopy
不遵守 260 个字符的限制(除非您使用 /256 开关):

robocopy K:\ E:\ /E

/E
是复制子文件夹,包括空子文件夹,如果您不想复制空文件夹,请使用
/S
代替。

完整的 robocopy 语法


0
投票

从 Powershell 5.1 开始,有一个注册表设置可用于处理 Powershell 脚本中的长路径。
运行以下命令检查LongPathsEnabled的值是否设置为1

Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Control\FileSystem LongPathsEnabled

使用管理员 Powershell,执行以下命令。

Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -value 1

这将允许 Copy-Item(和其他 *-Item 命令)避免 256 个字符的限制,而无需修改脚本。

我将以下代码添加到我的脚本中,以检查是否设置了该值,以防我们移动到新的构建机器。

$LongPath = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem" LongPathsEnabled
if ($LongPath.LongPathsEnabled -ne 1) {
    Write-Host "LongPathsEnabled is not set. Build paths are likely to exceed 256 characters and will fail."
    Exit 1
}
© www.soinside.com 2019 - 2024. All rights reserved.