Windows-Xp

在 CLI(或 .bat 文件)的路徑中檢測到帶有空格的系統資料庫項?

  • July 20, 2012

我遇到了一個問題,我的經驗(和 Google-fu)讓我失望了。

基本上,我需要將KB968730推送給幾百個客戶左右。自然,想在開始安裝之前檢查修補程序的安裝。可悲的是,我需要使用腳本和 GPO 來執行此操作,而不是像 SCCM 這樣的適當系統。通常不會給我帶來任何問題,但是,似乎有一個問題。

問題是此修補程序安裝的系統資料庫項的路徑中有一個血腥的空間。具體來說,它安裝到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730.

毫不奇怪,標準的批處理文件/CMD 命令reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730會引發語法錯誤並弄亂我的批處理文件的安裝檢查部分——它將路徑的第二部分視為第二個參數。所以,當然,我嘗試用雙引號將路徑封裝起來,沒有任何樂趣。單引號,沒有喜悅。威脅我的作業系統和/或微軟也沒有產生結果。

經過一些Google搜尋和咒罵後,我找到了似乎是解決這個問題的方法,但由於某種原因我無法弄清楚,但無法讓它發揮作用。(毫無疑問,因為這些天我的編碼技能很弱,而且字元串標記化在最好的時候讓我陷入了困境。)

似乎我想使用的是:

for /f "Tokens=2,*" %%a in (‘reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path’) do (set xpath=%%a)然後使用%xpath%,但這不起作用。將標記設置為 1 給我空間之前的路徑,設置為 2 給我空間之後的路徑,我不知道如何將一個值附加到另一個值。特別令人沮喪,因為我看到的所有答案都說“謝謝,它有效!!!” 或類似的。*(請注意,%在命令行上直接執行時刪除一個。)

任何人都知道我在這裡搞砸了什麼?

或者,如果有人仍然使用 VBS 並且知道如何使用它,我會很高興地選擇該選項。(不過,沒有 PowerShell,因為我們的 XP 客戶端沒有安裝它。)

PS,如果這更適合 StackOverflow,我對它的遷移沒有任何問題,但我最初的想法是“我們”不喜歡開發人員來這裡詢問

$$ to us $$關於設置他們的開發機器的瑣碎問題,所以我認為他們可能對我的問題有同樣的感覺。

雙引號似乎適用於包含空格的系統資料庫路徑。我剛剛在 Windows XP SP3 上進行了測試。以下返回預期的鍵/值:

REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"

如果您想使用標記,則需要使用delims選項指定使用空格/製表符作為分隔符。來自FOR /?

   delims=xxx      - specifies a delimiter set.  This replaces the
                     default delimiter set of space and tab.

;用作分隔符的簡單批處理範例。

FOR /F "usebackq delims=;" %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path`) DO (
   SET XPATH=%%A
)

此外,您可能會發現該wmic實用程序很有幫助。它帶有 XP 並使用 WMI 來做這件事。您可以通過以下方式快速檢查您的 KB:

wmic qfe list brief | FIND /I "KB968730"

引用自:https://serverfault.com/questions/409402