在BATCH中设置WMIC以使用程序版本

时间:2017-10-09 15:27:30

标签: batch-file cmd wmic

我正在尝试将wmic结果解析为批处理文件中的变量,但似乎我被困在我使用的字符串的转义序列中...

变量pver应该在批处理文件中包含此行末尾的版本号。但我没有得到正确的语法。

文件夹\ App只是一个示例,与应用程序的文件名相同。

totalOrder.forEach(function (customerOrder) {
   customerOrder.meal;
   ...
}

任何一个想法是我在思考时犯了错误?

2 个答案:

答案 0 :(得分: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选项生成格式为version=value的行,可以通过for / f

进行解析

答案 1 :(得分:1)

从批处理文件:

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

从命令行:

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将使用固定宽度空格尾随填充输出。之后你可能需要处理它们。

或许这样:

@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=%*"