我一直在努力獲得批量使用WMIC的特定輸出以建立一個自動卸載腳本。我遇到的問題是,我嘗試刪除的應用程序的卸載程序是在每個系統上自動生成的SSID下創建的(例如:C:\ ProgramData {07BFF8FA-C12F-46C7-8239-8EE83E21B5DA} \程序名\ UNINSTALL.EXE)。因此,我無法建立基於註冊表的靜態卸載位置,因爲卸載程序字符串也位於註冊表中的相同SSID下。從WMIC獲取產品名稱批量變量
我試過一對夫婦的拉動卸載信息和唯一的一個我,就會向接近降落的不同的方式使用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,我得到這樣的:
:\Users\Administrator>echo <product-name>
<product-name>
:\Users\Administrator>echo
ECHO is on.
公告輸出缺少驅動器號。這正是我所看到的,所以它很奇怪,並且參數正在設置,echo'd然後未設置。
我也試着通過文本文件中繼做到這一點:
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循環中,並逐張用於指出逸出邏輯爲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
由於一噸球員!
'沒有實例(多個)Available.'意味着沒有應用標準對象被發現。 – npocmaka
定義了變量'%product-name%'嗎? – SachaDee
@npocmaka我知道,但這基本上是相同的命令,除了格式化爲批處理,而不是直接從cmd提示符運行它,所以我不知道爲什麼它會從CMD輸出但不是批處理 – pyr0ball