2017-08-26 37 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" 
)