Batch字符串操作:如何提取AssemblyInfo版本号的前3个分段
批处理脚本修改方案
原脚本已经可以从AssemblyInfo.cs中正确提取完整四段式版本号(例如1.1.0.0),只需在拿到完整版本值后追加截断处理逻辑即可,完全无需改动原本查找匹配的核心规则。
核心修改内容
- 补全原脚本的隐藏缺陷:原脚本未开启延迟环境变量扩展,在for循环块内给变量赋值时,默认配置下循环内的变量值不会即时生效,会出现最终echo输出为空的问题,需要在脚本开头添加
setlocal enabledelayedexpansion。 - 新增版本截断逻辑:对提取到的完整版本号,以
.为分隔符拆分字符串,取前3个分段重新拼接为三段式版本号。
修改后可直接运行的完整脚本
@echo off setlocal enabledelayedexpansion REM extract version from assembly ignoring commented out version FOR /F delims^=^"^ tokens^=1,2^* %%A IN ('findstr /L /B /C:"[assembly: AssemblyVersion" "AssemblyInfo.cs"') DO ( set "full_version=%%B" REM 按点拆分,仅保留前3个版本分段 for /f "tokens=1-3 delims=." %%a in ("!full_version!") do ( set "version=%%a.%%b.%%c" ) ) echo 处理后的三段式版本号: !version! endlocal
逻辑适配说明
- 完全保留原脚本的版本提取规则:依然严格匹配行开头的
[assembly: AssemblyVersion特征,自动跳过被注释的版本行,和原脚本的提取精度完全一致。 - 截断逻辑无边界兼容问题:哪怕原文件中的版本号本身不足4段,该处理逻辑也不会报错,只要是点分隔的标准版本格式,都能正确取到前3段。
- 脚本结尾添加
endlocal收尾,避免局部环境变量污染全局系统配置。
内容的提问来源于stack exchange,提问作者Wartino
相关产品推荐
相关产品推荐

