如何在Windowsbatch file中提取版本号?

我需要从string中提取主要,次要和修订号码,并实现这一点我试图分割一个batch file中的string使用'。 字符作为分隔符。

例如:如果用户在命令提示符中input1.0.2 ,我应该能够提取

  • 1 – 主要版本,
  • 0 – 次要版本和
  • 2 – 修订

我试图使用FOR命令来实现这一点,但只是没有通过。 任何人都可以帮助我的提取部分

@ECHO OFF & SETLOCAL set /p "ReleaseVersion=Please specify the software release version : " :nextVar for /F "tokens=1* delims=." %%a in ("%ReleaseVersion%") do ( set %%a set ReleaseVersion=%%b ) if defined ReleaseVersion goto nextVar @PAUSE 

Solutions Collecting From Web of "如何在Windowsbatch file中提取版本号?"

干得好…

 @ECHO OFF & SETLOCAL set /p "ReleaseVersion=Please specify the software release version : " for /F "tokens=1,2,3 delims=." %%a in ("%ReleaseVersion%") do ( set Major=%%a set Minor=%%b set Revision=%%c ) echo Major: %Major%, Minor: %Minor%, Revision: %Revision% 

输入输出:

请指定软件版本:1.0.2

专业:1,轻微:0,修订:2

没有足够的声望评论。 发布一个答案,而不是:)

有一个有用的资源: http : //ss64.com/nt/syntax-substring.html

 SET _test=123456789abcdef0 ::Skip 7 characters and then extract the next 5 SET _result=%_test:~7,5% ECHO %_result% =89abc 

使用这种方法从字符串中提取子字符串。

更新:

获取字符串中的字符位置

当你得到点的位置,你可以使用上面描述的方法从输入字符串中提取必要的部分。

我最近发现了一个有趣的技巧,可以根据分隔符分割一个字符串, 而不必使用命令 ,所以我无法抗拒在这里发布的诱惑。 这个问题也代表了一个不同的方式来使用我的方法(拆分字符串超过2个不同的变量)。 这里是:

 @echo off setlocal EnableDelayedExpansion set /p "ReleaseVersion=Please specify the software release version : " set "v=Minor" set "Major=%ReleaseVersion:.=" & (if defined Minor set v=Revision) & set "!v!=%" echo Major: %Major%, Minor: %Minor%, Revision: %Revision% 

在这个职位的进一步细节。

编辑一些解释添加

你可以在这里阅读split方法的完整描述。 但是,这个答案也使用了一个if defined Minor命令,以便在设置次要变量值后将变量名称从“Minor”更改为“Revision”。 如果删除@echo off命令并查看跟踪输出,则可以轻松理解这一点。

虽然这个方法允许用不同的名字定义两个以上的变量,但是为每个附加的变量插入一个& (if defined prevVar set v=newVar)命令有点麻烦。 例如:

 @echo off setlocal EnableDelayedExpansion set "str=1.0.2.25" set "v=Minor" set "Major=%str:.=" & (if defined Minor set v=Revision) & (if defined Revision set v=Subrev) & set "!v!=%" echo Major: %Major%, Minor: %Minor%, Revision: %Revision%, Subrev: %Subrev% 

在一个子程序的帮助下,一个字符串在多个不同变量中的分割可以更好地实现:

 @echo off setlocal EnableDelayedExpansion call :SplitString "1.0.2.35" Major Minor Revision Subrev echo Major: %Major%, Minor: %Minor%, Revision: %Revision%, Subrev: %Subrev% goto :EOF :SplitString string varName ... rem Get string in "str" variable set "str=%~1" rem Create "v" array with variable names set i=0 for %%a in (%*) do ( set "v[!i!]=%%a" set /A i+=1 ) rem Separate the string in individual variables set "p=%%" set i=1 set "!v[1]!=%str:.=" & set /A i+=1 & call set "!p!v[!i!]!p!=%" exit /B 

在这个子程序中使用的split方法在这篇文章中有详细的解释,但是我在这里复制了相关的部分并修改了这个例子:


请注意, call set "!p!v[!i!]!p!=%"部分是一个嵌套替换 ,与原始替换的每个子字符串一起执行。 这样,这个方法包括三个阶段:

  • 原始字符串通过第一个%str%扩展分成几个部分,例如: call set "!p!v[!i!]!p!=1"call set "!p!v[!i!]!p!=0"
  • 每个部分都使用延迟扩展!变量进行处理! 来组装最后的表达。 此方法允许在原始%expansion%无法处理的位置插入引号和其他特殊字符(如百分号)。 例如: call set "%v[1]%=1"call set "%v[2]%=0"
  • 通过嵌套的CALL命令评估每个部分的最终表达式,例如: set "Major=1"set "Minor=0"等。