簡體   English   中英

從 WMIC 批量獲取變量的產品名稱

[英]Get product name from WMIC for a variable in batch

為了構建自動卸載腳本,我一直在努力使用 WMIC 批量獲取特定輸出。 我遇到的問題是,我嘗試刪除的應用程序的卸載程序是在每個系統上自動生成的 SSID 下創建的(例如:C:\\ProgramData{07BFF8FA-C12F-46C7-8239-8EE83E21B5DA}\\程序名\\Uninstall.exe)。 因此,我無法根據注冊表構建靜態卸載位置,因為卸載程序字符串也位於注冊表中的相同 SSID 下。

我嘗試了幾種不同的方法來提取卸載信息,而我唯一接近的方法是使用 WMIC:

wmic product where "Name like '%product name%'" get name

輸出:

Name
<product-name>

^ 和一個額外的回車,那個回車是問題所在。 它設置變量,然后清除它。

這是我試圖用來讓它工作的 for 循環:

@echo off
for /f "skip=1 delims==" %%a in (
     'wmic product where "Name like '%product-name%' get name'
) do set PROD=%%a
echo %PROD%

輸出:

C:\Users\Administrator>ECHO is off.

這意味着 %PROD% 變量根本沒有定義。

如果我使用 @echo ON 運行批處理,我會得到:

:\Users\Administrator>echo <product-name>
<product-name>
:\Users\Administrator>echo
ECHO is on.

請注意,輸出缺少驅動器號。 這正是我所看到的,所以很奇怪,而且正在設置參數,然后回顯然后取消設置。

我也嘗試通過文本文件中繼來做到這一點:

wmic /OUTPUT:%~dp0\wmic.txt product where "Name like '%product-name%'" get name
for /f %%a in (
     "%~dp0\wmic.txt" | findstr /v "product-name"
) do set PROD=%%a

任何幫助/建議將是最受歡迎的!


更新!

通過 npocmaka 提供的鏈接,我想出了這個:

for /f "skip=1 delims=" %a in ('wmic product where "Name like '%product-name%'" get name') do @for /f "delims=" %b in ("%a") do @echo %b

正確輸出產品名稱

但是,當我從批處理運行它時:

for /f "skip=1 delims=" %%a in (
    'wmic product where "Name like '%product-name%'" get name'
) do @for /f "delims=" %%b in ("%%a") do echo %%b

我得到:

No Instance(s) Available.

對我來說,這聽起來像是 WMIC 在語法或其他方面的問題


解決了!

歸功於 npocmaka 建議嵌套 FOR 循環,以及 indiv 指出 WMIC 變量的轉義邏輯

批處理中使用的命令的正確語法:

for /f "skip=1 delims=" %%a in (
     'wmic product where "Name like '%%product-name%%'" get name'
) do @for /f "delims=" %%b in ("%%a") do @echo %%b

非常感謝你們!

編輯。原來需要使用%作為通配符

@echo off
for /f "skip=1 delims==" %%a in (
     'wmic product where "Name like '%%product-name%%'" get name /format:table'
) do (
   for /f "tokens=* delims=" %%# in ("%%a") do  set PROD=%%a
) 
echo %PROD%

在這里解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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