如何在cmd脚本的字符串中找到版本号?

时间:2018-10-16 12:03:57

标签: batch-file cmd

对于我的软件开发项目,我使用.cmd文件自动创建文件名中带有版本号的二进制文件。版本号存储在C头文件中。

我有一个名为“ app_version.h”的文件,其中包含类似

的文件
Generic include file code or commenting
#define APP_SW_VER ("Vx.y.zww")
More generic include file code or commenting

Vx.y.zww是版本号的格式。有效的示例是:

  • V1.0.1
  • V1.0.1DBG
  • V1.0.1PT11
  • V81.2.1RC2

对于文件名,我想用下划线替换点并将其附加到预定义的字符串中,然后将其用作文件名。

主要问题:提取Vx.y.zww部分并将其用作cmd文件中的变量。

整个过程示例

输入:

“ MYPROGRAM”作为预定义的字符串

二进制文件名为“ output.bin”

文件app_version.h包含行#define APP_SW_VER ("V1.1.3")

所需的输出:

名称为“ MYPROGRAM_V1_1_3.bin”的文件

1 个答案:

答案 0 :(得分:1)

非常直接(理论上请参见下面的注释):获得正确的直线并得到引号之间的部分。将.替换为_,然后添加预定义的字符串和扩展名:

for /f tokens^=2delims^=^" %%a in ('type app_version.h^|findstr /bc:"#define APP_SW_VER"') do set "ver=%%a"
echo MYPROGRAM_%ver:.=_%.bin

注意:常规语法for /f "tokens=2 delims=x"不能用于定界符"。因此,我们必须使用这种丑陋的解决方法(不带引号,而是转义一些特殊字符)。

另一种可能性(感谢Squashman)是使用()作为分隔符。引号可以通过使用%%~a轻松删除(可以保留熟悉的语法):

for /f "tokens=2 delims=()" %%a in ('type app_version.h^|findstr /bc:"#define APP_SW_VER"') do set "ver=%%~a"
echo MYPROGRAM_%ver:.=_%.bin