我尝试在Powershell中使用Get-ChildItem
的长UNC路径,如
Get-ChildItem -Path "\\?\c:\blabla"
和Powershell说道路上有非法字符。完全相同的路径适用于Resolve-Path
。如何在gci
使用“\\?\”语法?
答案 0 :(得分:1)
我似乎无法找到适用于?
的咒语。但是,以下工作可行:
gci '\\localhost\C$\'
gci ('\\{0}\C$\' -f $ENV:COMPUTERNAME)
更新: 参考:UNC path does not work with .NET?
\\?\
部分是特定于Windows的,与powershell中的--%
基本相同,也就是说'此后的所有内容都是文字字符串'
示例:
$LongUncPath = '\\?\C:\'
Get-ChildItem -Path:$LongUncPath.TrimStart('\\?\')
答案 1 :(得分:0)
我发现我的路径末尾有不可打印的字符。我通过使用trim()删除它们来纠正“路径中的非法字符”。
$ path.trim()
答案 2 :(得分:0)
好消息! 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/pull/3960/files/3e7e28d49f306ab4874e32cf10eabb43559dae26#diff-52b1a915619c71b288b3f92f944924c4
修复PowerShell Core以允许使用超过260个字符的长路径。 (#3960)
...
调用Windows本机API以确定某个项是否存在时,请确保该路径前面带有\?\以允许路径> 260个字符。
您只需下载该版本或更高版本(通过PowerShell标记)。我刚刚将用于Windows x64的v6.0.0-beta.9下载到我的Windows 10计算机上并进行了测试,创建了一个包含460个字符的路径!