2017-10-09 45 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