我尝试Get-ChildItem
在 Powershell 中使用长 UNC 路径,例如
Get-ChildItem -Path "\\?\c:\blabla"
并且Powershell说路径中有非法字符。相同的路径适用于Resolve-Path
. 如何使用 "\\?\" 语法gci
?
我尝试Get-ChildItem
在 Powershell 中使用长 UNC 路径,例如
Get-ChildItem -Path "\\?\c:\blabla"
并且Powershell说路径中有非法字符。相同的路径适用于Resolve-Path
. 如何使用 "\\?\" 语法gci
?
我似乎找不到适用于 的咒语?
。但是,以下确实有效:
gci '\\localhost\C$\'
gci ('\\{0}\C$\' -f $ENV:COMPUTERNAME)
更新:参考:UNC 路径不适用于 .NET?
该\\?\
部分是特定于 Windows 的,基本上与 powershell 中的功能相同--%
,即“之后的所有内容都是文字字符串”
例子:
$LongUncPath = '\\?\C:\'
Get-ChildItem -Path:$LongUncPath.TrimStart('\\?\')
好消息!PowerShell v6.0.0-beta.3 及更高版本现在默认支持 UNC 路径;它会自动将 UNC 字符串添加到大于 260 个字符的路径中:
https://github.com/PowerShell/PowerShell/releases/tag/v6.0.0-beta.3 https://github.com/PowerShell/PowerShell/pull/3960 https://github.com/PowerShell/PowerShell/拉/3960/文件/3e7e28d49f306ab4874e32cf10eabb43559dae26#diff-52b1a915619c71b288b3f92f944924c4
修复 PowerShell Core 以允许使用超过 260 个字符的长路径。(#3960)
...
在调用 Windows 本机 API 以确定项目是否存在时,请确保在路径前添加 \?\ 以允许路径 > 260 个字符。
您只需下载该版本或更高版本(通过PowerShell标签)。我刚刚将适用于 Windows x64的 v6.0.0-beta.9下载到我的 Windows 10 机器上并对其进行了测试,创建了一个包含 460 个字符的路径!
我发现我的路径末尾有不可打印的字符。我通过使用 trim() 更正了“路径中的非法字符”以删除它们。
$path.trim()