如何确定字符串是否是格式化正确的路径,而不管它是否实际存在?



我正在创建一个函数,我想验证传递给我的函数的字符串是一个格式正确的路径。Test-Path确定路径是否存在,这是我不想要的。是否有一个RegEx表达式可以做到这一点?或者其他本地cmlet ?

谢谢。

您可以使用Test-Path -IsValid来检查有效但不存在的路径:

Test-Path -LiteralPath 'C:Whatever' -IsValid

问题在于"valid"似乎和"正确格式化"的意思不一样。

例如,如果我使用D:Whatever,它在我的机器上也是有效的,而E:Whatever不是;因为没有这样的PSDrive(但CD存在)。

同样奇怪的是,WSman:whateverFalseHKCU:whateverTrue

它似乎认为UNC路径是有效的。

如果您打算尝试用另一种方式验证路径,您可以从无效字符集开始,您可以通过[System.IO.Path]::InvalidPathChars获得。

但是这里也有一些奇怪的事情,其中一个字符是§,然而C:§whateverTest-Path -IsValid返回True

我在这里提出的问题可能比答案要多。

从评论:

我想验证一个完全合格的路径与驱动器号和可能的目录。C:SomeDirectory或D:blahblah">

我认为这里最直接的事情可能是首先检查路径是否"有根",然后将其转换为[DirectoryInfo]对象:

if ([System.IO.Path]::IsPathRooted($path)) {
# this will throw an exception if the path can't be used
# for example Z:whatever is accepted, ZZ:whatever is not
$validatedPath = ([System.IO.DirectoryInfo]$path).FullName
}
else {
throw [System.ArgumentException]"Only fully-qualified paths are accepted."
}

你也可以选择保留[DirectoryInfo]对象而不是"converting">

返回一个带有.FullName的字符串,因为该对象有许多有用的属性和方法,即使该目录不存在。
$path = 'Z:whatever' -as [System.IO.DirectoryInfo]
$path | Format-List *
$path | Get-Member

相关内容

  • 没有找到相关文章

最新更新