2017-08-26 36 views
1

程序在命令行上返回此正则表达式类型[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}的版本字符串。因此,输出如下所示:如何获取批处理文件中程序的主要版本号,次要版本号等?

C:\users\user\desktop>a.exe --version 
Version: 1.22.53.4134 

我将输出保存到一个变量VersionGET-版本info.bat

for /f "usebackq tokens=1* delims=: " %%i in (`a.exe --version`) do (
    if /i "%%i"=="Version" set "Version=%%j" 
) 

为了解决我确切的问题,我只需要主要未成年人版本号,但一般的,适应性的解决方案当然也是好的。

如何在批处理文件中获取程序的主版本号和次版本号?

回答

1

您可以在批处理文件中使用此单个命令行用于分割a.exe的行输出的分隔符​​分别是冒号:,点.和空格 ,如delims=:. 所指定的。

感兴趣的只是前tokens=1-3指定的前3个子字符串(标记)。将第一个子字符串Version分配给指定的循环变量I。第二个子字符串1根据ASCII table分配给下一个循环变量,即J。第三个子字符串22被分配给循环变量K

+0

工程很好,但我需要添加一行:'set“Version =%Version:。=,%”'以获取带点的版本号。 – user69453

+0

我不明白你的意见。在我的测试中,通过__FOR__从文本文件处理'Version:1.22.53.4134'这行,而不是输出我没有的应用程序'a.exe',环境变量'Version'的值为'1.22'批处理文件执行后。该点是'set'Version = %% J。%% K“'中的固定字符。因此,无论您的问题是否包含真实数据,或者如果您需要额外的一行,都会造成问题。另外你的命令行用版本字符串中的逗号代替所有的点。如果你想要逗号,你可以使用'%% J,%% K'而不是'%% J。%% K'。 – Mofi

1

点添加到delims,延长令牌和复合你的版本与所需的元素:

for /F "tokens=1-3 delims=:. " %%I in ('a.exe --version') do if /I "%%I" == "Version" set "Version=%%J.%%K" 

的:

for /f "usebackq tokens=1-4* delims=:. " %%i in (`a.exe --version`) do (
    if /i "%%i"=="Version" set "VerMAjorMinor=%%j.%%k" 
)