2017-10-09 90 views
0

我試圖將wmic結果解析爲批處理文件中的變量,但好像我被困在我使用的字符串的轉義序列中...在批處理中設置WMIC以利用程序版本

變量pver應該在批處理文件中包含此行末尾的版本號。但我沒有得到正確的語法。

文件夾\ App只是一個例子,與應用程序的文件名相同。

for /F "tokens=*" %a in ('wmic datafile where "Name=C:\\Program Files (x86)\\App\\name.exe" get version') do set pver=%a 

任何人的想法我犯了我的錯誤思想?

+2

你聲稱使用批處理file'代碼',但是你用命令行的語法。在批處理文件中將每個「%a」更改爲「%% a」。 – Stephan

+0

我會試着讓'wmic'命令行工作在'/ F'周圍前......' – aschipfl

回答

1
set "pver="&for /F "tokens=2delims==" %a in ('wmic datafile where "Name='C:\\Program Files (x86)\\visipics\\visipics.exe'" get version /format:list') do @if not defined pver set "pver=%a" 

從提示符爲我工作。顯然,文件名需要單引號。所述format選項生成一個線可以由FOR/F

1

從一個批處理文件進行解析的格式version=value的:

@For /F "UseBackQ Skip=1 Delims=" %%A In (`WMIC DataFile Where "Name='C:\\Program Files (x86)\\App\\name.exe'" Get Version`) Do @For /F "Tokens=*" %%B In ("%%~A") Do @Set "pver=%%B" 

或者在較短的線:

@Echo Off 
For /F "UseBackQ Skip=1 Delims=" %%A In (`WMIC DataFile Where^ 
"Name='C:\\Program Files (x86)\\App\\name.exe'" Get Version 
`) Do For /F "Tokens=*" %%B In ("%%~A") Do Set "pver=%%B" 

從命令line:

For /F "UseBackQ Skip=1 Delims=" %A In (`WMIC DataFile Where "Name='C:\\Program Files (x86)\\App\\name.exe'" Get Version`) Do @For /F "Tokens=*" %B In ("%~A") Do @Set "pver=%B" 

在這兩種情況下,請注意WMIC將traili用固定寬度的空間填充輸出。之後你可能需要處理它們。

像這樣也許:

@Echo Off 
For /F "UseBackQ Skip=1 Delims=" %%A In (`WMIC DataFile Where^ 
"Name='C:\\Program Files (x86)\\App\\name.exe'" Get Version 
`) Do For /F "Tokens=*" %%B In ("%%~A") Do Call :Sub %%B 
Echo %pver% 
Pause 
Exit/B 

:Sub 
Set "pver=%*" 
+0

'WMIC'輸出的第三行消失了嗎? – lit

+0

第二個'For'循環就是出於這個目的。 – Compo

相關問題