在 Windows 10 上,Test-Path 可与任何正常有效路径配合使用
PS C:\> Test-Path E:
True
PS C:\> Test-Path E:\
True
PS C:\> Test-Path E:\test
True
但如果我使用长路径前缀\\?\
它仅当路径指向驱动器中的子文件夹时才有效
PS C:\> Test-Path \\?\E:\test
True
PS C:\> Test-Path \\?\E:\
Test-Path : Cannot retrieve the dynamic parameters for the cmdlet. Cannot process argument because the value of
argument "path" is not valid. Change the value of the "path" argument and run the operation again.
At line:1 char:1
+ Test-Path \\?\E:\
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Path], ParameterBindingException
+ FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.TestPathCommand
PS C:\> Test-Path \\?\E:
Test-Path : Cannot retrieve the dynamic parameters for the cmdlet. Cannot process argument because the value of
argument "path" is not valid. Change the value of the "path" argument and run the operation again.
At line:1 char:1
+ Test-Path \\?\E:
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Path], ParameterBindingException
+ FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.TestPathCommand
为什么会这样?有没有什么方法可以使它适用于任何\\?\
路径?
答案1
我尝试了一些方法,true
但仍然会产生错误。
Test-path -literalpath \\?\E:\
True
但是 powershell 发出了关于非法字符的警告,实际上输出如下所示:
PS C:\User\This-User> test-path -LiteralPath \\?\c:\
test-path : Caracteres no válidos en la ruta de acceso. #PC is in Spanish it means: Non valid characters in path
At line:1 char:1
+ test-path -LiteralPath \\?\c:\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (\\?\c:\:String) [Test-Path], ArgumentException
+ FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand
True
但是它返回True
。此外,如果你执行Resolve-path -literalpath \\?\c:
它将返回如下内容:
Microsoft.PowerShell.Core\FileSystem::\\?\c:\
而如果驱动器不存在,它将不返回任何内容。
我不知道如何消除警告,但它会评估True
它是否存在,False
如果不存在
Resolve-path
一个想法是在拆分字符串之后合并输出,Test-path
但我认为您会以这种方式使用长路径名。
希望这有所帮助。
编辑:
此外,我认为在机器中使用物理驱动器时的正确语法是\\.\c:\
这也将评估为True
。