2015-06-11 38 views
3

我一直在努力獲得批量使用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 

由於一噸球員!

+0

'沒有實例(多個)Available.'意味着沒有應用標準對象被發現。 – npocmaka

+0

定義了變量'%product-name%'嗎? – SachaDee

+0

@npocmaka我知道,但這基本上是相同的命令,除了格式化爲批處理,而不是直接從cmd提示符運行它,所以我不知道爲什麼它會從CMD輸出但不是批處理 – pyr0ball

回答

3

EDIT .Turns指出%是需要的是used as wildcard

@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% 

它是explained here

+1

從我得到的輸出是: 'do(在這個時候是意外的).' – pyr0ball

+1

在「do」之後增加了一個空格並獲得輸出,但壞消息 節點 - 錯誤: 說明=無效查詢 ECHO處於關閉狀態 – pyr0ball

+0

進步!檢查鏈接後,我想出了這一點:'FOR/F「跳過= 1個delims =」 %% a在。 ('wmic product where'Name like'%product-name%''get name')爲/ f「delims =」%% b在(「%% a」)中做do echo %% b'給我「No實例可用「 – pyr0ball