如何在Windows批处理文件中的字符后提取数字

时间:2015-06-04 13:43:23

标签: windows batch-file

您好我需要在最后一个点之后提取字符串的最后一部分 例如:

1.2.37 ==> I need the 37
1.2.567 ==> I need the 567

因为你可以看到点没有修复后的字符数,所以像

这样的表达式
base=%fullver:~0,-2%

不能使用。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:2)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "fullver=1.2.456"
    for %%a in ("%fullver:.=\%") do set "base=%%~na"

    echo %base%

技巧是用反斜杠替换点,将字符串作为路径处理并检索其中最后一个元素的名称。

或者,如果需要检索所有元素而不是for,则使用for /f来使用点作为分隔符来标记变量

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "fullver=1.2.456"
    for /f "tokens=1-3 delims=." %%a in ("%fullver%") do (
        set "major=%%a"
        set "minor=%%b"
        set "build=%%c"
    )

    echo [%major%] [%minor%] [%build%]

答案 1 :(得分:1)

我发现以下问题实际上是对字符串进行了标记。

How to split a string in a Windows batch file?

可能你可以尝试使用它来区分"。"并获取存储在字符串变量中的最后一个值。不确定是否有一种简单的方法,但这有效。

以下是符合您需求的经过编辑的版本:

5 + 5 + 5 + 2

答案 2 :(得分:0)

如果您只查找最后一个节点,或者您知道有多少节点,我更喜欢MC ND's answer

如果节点总数未知,这是捕获所有节点的方法:

struct

答案 3 :(得分:0)

另一个解决方案!这个获取字符串的第一部分和最后部分:

@echo off
setlocal

set "testString=1.2.5.234"

set "first="
for %%a in ("%testString:.=" "%") do (
   if not defined first set "first=%%~a"
   set "last=%%~a"
)

echo First: %first%
echo Last:  %last%

作为奖励,此方法可以正确处理可能出现在字符串中的特殊批处理字符,除了通配符。

答案 4 :(得分:0)

您可以使用以下命令来实现所需的功能。

base=%fullver:~~4,3%

4表示第4位数字,即5和3表示第4位3位数字。

输出将为

567