【问题标题】:Batch String manipulation get first 3 Blocks批处理字符串操作获得前 3 个块
【发布时间】:2021-05-15 03:24:18
【问题描述】:
我有一个 AssemblyInfo 版本号,格式如下:
1.1.0.0
但现在我只想要前 3 个数字
1.1.0
而不是 4 块。但只有前 3 个区块。
我的脚本是这样的。
@echo off
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 "version=%%B"
)
echo %version%
我怎样才能得到一个只有前 3 个块的变量?
【问题讨论】:
标签:
string
batch-file
assembly
【解决方案1】:
根据来自MSDN 的信息,您的版本号可以是:
[assembly:AssemblyVersion("2.3.25.1")]
[assembly:AssemblyVersion("1.2.15.*")]
[assembly:AssemblyVersion("1.2.*")]
假设 cmets 以 // 开头一行
我将提供以下示例:
@Echo Off
SetLocal EnableExtensions
For %%G In (Build, Major, Minor, Revision, Version) Do Set "%%G="
For /F EOL^=/^ Tokens^=2^ Delims^=^" %%G In (
'%SystemRoot%\System32\findstr.exe /RIC:"\<\[assembly: AssemblyVersion(\"" "AssemblyInfo.cs"'
) Do For /F "Tokens=1-4 Delims=." %%H In ("%%G"
) Do Set /A Major=%%H, Minor=%%I, Build=%%J, Revision=%%K 2> NUL
If Defined Build (Set "Version=%Major%.%Minor%.%Build%"
) Else If Defined Minor Set "Version=%Major%.%Minor%.*"
Set Version 2> NUL
Pause
最后一行是可选的,仅在您直接从 GUI 运行它的情况下才包含。在这些情况下,它允许您在窗口关闭之前查看任何输出。它上面的行只是为您提供了变量名称和值,如果已定义,您也可以将其替换为 If Defined Version Echo %Version%,如果您愿意。