对于我的软件开发项目,我使用.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”的文件
答案 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