2

我尝试Get-ChildItem在 Powershell 中使用长 UNC 路径,例如

Get-ChildItem -Path "\\?\c:\blabla"

并且Powershell说路径中有非法字符。相同的路径适用于Resolve-Path. 如何使用 "\\?\" 语法gci

4

3 回答 3

1

我似乎找不到适用于 的咒语?。但是,以下确实有效:

gci '\\localhost\C$\'
gci ('\\{0}\C$\' -f $ENV:COMPUTERNAME)

更新:参考:UNC 路径不适用于 .NET?

\\?\部分是特定于 Windows 的,基本上与 powershell 中的功能相同--%,即“之后的所有内容都是文字字符串”

例子:

$LongUncPath = '\\?\C:\'
Get-ChildItem -Path:$LongUncPath.TrimStart('\\?\')
于 2013-11-04T18:55:17.127 回答
1

好消息!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 个字符的路径!

于 2017-11-01T01:08:02.583 回答
0

我发现我的路径末尾有不可打印的字符。我通过使用 trim() 更正了“路径中的非法字符”以删除它们。

$path.trim()

于 2015-05-13T19:10:52.613 回答