powershell - 在注册表和 gpedit.msc 中启用长文件路径不起作用
问题描述
我需要使用 powershell cmd 创建具有超过 250 个字符的长文件路径的文件夹。
我做了以下事情,
1,在此注册表路径“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem”中,我已将 LongPathsEnabled 的值更改为“1”
2,我在“本地计算机策略>计算机配置>管理模板>系统>文件系统>启用Win32长路径”中启用了长文件路径(gpedit.msc)
但是在使用 power shell cmd 创建一个超过 250 个字符的文件夹时,它会抛出如下错误
“New-Item : 指定的路径、文件名或两者都太长。全限定文件名必须小于 260 个字符,目录名必须小于 248 个字符。”
解决方案
应用\\?\
前缀,如下例所示:
$longPart = $( 65..86 | ForEach-Object {
[string][char]$_ * 10
} ) -join '\'
$Path = "\\?\D:\PShell\DataFiles\$longPart"
$longPart.Length, $Path.Length -join ','
New-Item -ItemType Directory -Path $Path
241,265 Directory: \\?\D:\PShell\DataFiles\AAAAAAAAAA\BBBBBBBBBB\CCCCCCCCCC\DDDDDDD DDD\EEEEEEEEEE\FFFFFFFFFF\GGGGGGGGGG\HHHHHHHHHH\IIIIIIIIII\JJJJJJJJJJ\KKKKK KKKKK\LLLLLLLLLL\MMMMMMMMMM\NNNNNNNNNN\OOOOOOOOOO\PPPPPPPPPP\QQQQQQQQQQ\RRR RRRRRRR\SSSSSSSSSS\TTTTTTTTTT\UUUUUUUUUU Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 03.01.2020 22:58 VVVVVVVVVV
对于文件 I/O,
\\?\
路径字符串的“”前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。...
因为它关闭了路径字符串的自动扩展,“
\\?\
”前缀还允许在路径名中使用“..
”和“.
”,如果您尝试对具有这些否则保留的相对路径的文件执行操作,这将很有用说明符作为完全限定路径的一部分。
请注意,您不能将“ \\?\
”前缀与相对路径一起使用。
LongPathsEnabled
在注册表中使用以下内容:
reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" -v long*
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled REG_SZ 1
推荐阅读
- r - 使用Base R将data.frame data.table中的字符串拆分为两列
- c# - Xamarin UiTest - 如何连接 mac 机器并从 windows VS 2019 运行 iOS 应用程序
- javascript - 编码这个自动时间戳脚本,它只在第 6-30 行工作,从未定义有限的单元格范围?
- here-api - HERE Maps Intermodal Routing API v8 示例不起作用(API 密钥验证)
- python - 如何计算列表中的项目出现次数,如果它不在列表中,则返回零计数?
- assembly - NASM 获取系统时间
- ios - SwiftUI 因一位用户的 EXC_BREAKPOINT (SIGTRAP) 而崩溃,我无法在模拟器中复制它
- powerquery - Excel PowerQuery 中的 IF AND OR
- r - plot_ly 具有常量变量的 3D 图
- javascript - v-model 没有正确绑定到对象数组