批量-提取指定字符前的字符串

批量-提取指定字符前的字符串

如何获取连字符前的字符串?以下代码获取连字符后的字符串。我该如何反转它?

set string=1.0.10-SNAPSHOT

echo %string:*-=%

SNAPSHOT

但我想要 1.0.10 而不是 SNAPSHOT

答案1

使用带有分隔符的 for ,如下所示:

set string=1.0.10-SNAPSHOT
for /f "delims=-" %%i in ("%string%") do echo %%i

答案2

以下代码获取连字符后的字符串。我该如何反转它?

echo %string:*-=%

...有一种笨拙的方法可以从字符串的开头获取到子字符串第一次出现的位置: - 海绵肚

set "head=%str:x=" & rem."%"
  • 移植到您的变量和分隔符:
set "string=%string:Your_Delimiter=" & rem."%"
set "string=%string:-=" & rem."%"
  • 更短的版本是:
echo\%string:-=&rem\%
  • 这也可以通过rem\替换::
echo\%string:-=&::%
  • 输出:
1.0.10

观察:回显变量时不使用“双引号”,以免转义自扩展变量

> set string=1.0.10-SNAPSHOT
> echo %string:-=&::% "%string:-=&::%"
       1.0.10         "1.0.10&::SNAPSHOT"


如果非数字字符串始终是这个或者始终具有相同的长度,则也可以删除最后 9 个字符:

set string=1.0.10-SNAPSHOT

echo %string:~0,-9%

1.0.10

一种非循环替代方法是使用子字符串的当前输出作为替换:

 cmd /v /c echo\ !string:-%string:*-=%=!
  • 输出:
1.0.10

其他资源:

相关内容