[英]Remove double quotes from path variable in PowerShell
我正在使用 PowerShell 5.1。
我有一個腳本可以從注冊表中檢索 HKLM:\SYSTEM\CurrentControlSet\Services<service>\ImagePath 值。 獲得返回的字符串如下所示:
"C:\Program Files\Dir1\Dir2"
請注意,雙引號是字符串的一部分。
我需要獲取此字符串表示的路徑的父目錄。 我嘗試了Split-Path
,但這會在返回值中留下前導雙引號,這會導致Test-Path
在確實存在的目錄上返回false
。 例如,
$key = "HKLM:\SYSTEM\CurrentControlSet\Services\<service>"
$val = "ImagePath"
$dir = Get-RegistryValue $key $val
: "C:\Program Files\Dir1\Dir2"
$parentDir = Split-Path $dir
: "C:\Program Files\Dir1 <--leading double quote
Test-Path $parentDir
: False
為了解決這個問題,我嘗試使用Trim()
調用來刪除任何前導或尾隨雙引號,但這似乎只是刪除了前導雙引號,即尾隨雙引號仍然存在。 根據我在 C# 中使用String.Trim()
的經驗,這對我來說似乎是一個錯誤。
$key = "HKLM:\SYSTEM\CurrentControlSet\Services\<service>"
$val = "ImagePath"
$dir = (Get-RegistryValue $key $val).Trim("`"")
: C:\Program Files\Dir1\Dir2" <-- trailing double quote
唯一可行的方法是將雙引號替換為空字符串,如下所示:
$key = "HKLM:\SYSTEM\CurrentControlSet\Services\<service>"
$val = "ImagePath"
$dir = (Get-RegistryValue $key $val).Replace("`"", "")
: C:\Program Files\Dir1\Dir2 <-- no double quotes
但是,這對我來說是錯誤的。 它適用於這種情況,因為路徑不能有雙引號,即雙引號字符是非法的路徑變量。 但是,如果返回的注冊表值在字符串中合法地包含雙引號怎么辦? 這種粗暴的方法將刪除該雙引號。
我還是 PowerShell 的新手,所以我很可能忽略了一些不需要我使用Replace()
調用的東西。 任何幫助是極大的贊賞。
如果報價是固定的,您可以 TrimEnd
$dir = (Get-RegistryValue $key $val).TrimEnd('"')
否則你可以像這樣進行檢查
$key = "HKLM:\SYSTEM\CurrentControlSet\Services\<service>"
$val = "ImagePath"
$tmp = (Get-RegistryValue $key $val)
$dir = if ($tmp.EndsWith('"')) {$tmp.TrimEnd('"')} else {$tmp}
如果有人有更好的答案,我想看看它,因為我一直來自 powershell 一段時間以來
您所描述的尾隨引號未刪除意味着引號后面有一些不可見的字符,例如空格。
要擺脫它,請使用Trim('" ')
或將兩個 Trim 鏈接在一起,例如
Trim().Trim('"')
第一個刪除字符串兩邊的所有空白字符(不僅是空格,還包括制表符、換行符等),第二個刪除引號。
PS 我們看不到您的 function 到底做了什么,但也許您可以為此使用 PowerShell 自己的Get-ItemPropertyValue ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.