【问题标题】: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 个块的变量?

【问题讨论】:

  • Wartino,我注意到您已以登录本网站的身份返回,但尚未确认我的官方回答。请参阅What should I do when someone answers my question? 了解在这种情况下您可以选择哪些选项,因为没有接受答案的问题不会被本网站视为已回答。

标签: 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%,如果您愿意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多