簡體   English   中英

從 PowerShell 中的路徑變量中刪除雙引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM