我使用的是PowerShell 5.1。
我有一个从注册表检索HKLM:\SYSTEM\CurrentControlSet\Services\ImagePath值的脚本。获取返回值的字符串如下所示:
"C:\Program Files\Dir1\Dir2"
请注意,双引号是字符串的一部分。
我需要获取此字符串表示的路径的父目录。我尝试了Split-Path,但这会在返回值中留下前导双引号,这会导致Test-Path在一个确实存在的目录上返回false。例如,
为了解决这个问题,我尝试使用Trim()调用删除所有前导或尾部双引号,但这似乎只删除了前导双引号,即尾部双引号保留不变。根据我在C#中使用String.Trim()的经验,这看起来像是一个bug。
唯一有效的方法是将双引号替换为空字符串,如下所示:
然而,这对我来说就是感觉不对劲。在这种情况下,如果路径不能有双引号,即双引号字符是非法的路径变量,它就会起作用。但是,如果返回的注册表值在字符串中合法地包含双引号,该怎么办?这种粗暴的方法将删除双引号。
我对PowerShell还很陌生,所以我很可能忽略了一些不需要使用Replace()调用就能完成我想做的事情的地方。任何帮助都是非常感谢的。
发布于 2021-02-28 05:09:30
您所描述的尾随引号未删除意味着引号后面有一些看不见的字符,比如空格。
也可以使用Trim('“')或将两个Trim链接在一起,如下所示
第一个删除字符串两边的所有空格字符(不仅是空格,还有制表符、换行符等),第二个删除引号。
附注:我们不能确切地看到你的函数做了什么,但也许你可以使用PowerShell自己的Get-ItemPropertyValue来做这件事?
发布于 2021-02-28 04:36:02
如果引用是固定的,您可以使用TrimEnd
否则你可以像这样做检查
如果有人有更好的方法,我很想看看,因为我从一段时间以来一直来自于powershell
https://stackoverflow.com/questions/66403041
复制相似问题