如何在 Windows 批处理文件中提取部分字符串?

Ken*_*Ken 38 windows string-manipulation batch-file

假设我有一个值,例如“Abc_123”,它存储在批处理 (cmd) 文件的变量中。我想最终得到一个只包含“123”的变量。有没有内置的方法来做到这一点?

我对方法或性能并不十分挑剔,只要它内置于典型的 Windows (Vista/2008) 系统中即可。

Joh*_*n T 49

使用子字符串语法:

C:\Users\John>set string=Abc_123

C:\Users\John>echo %string%
Abc_123

C:\Users\John>echo %string:~4,3%
123
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用“帮助集”查看完整语法,如[在批处理文件中执行子字符串的最佳方法是什么?](http://stackoverflow.com/questions/636381/what-is-the-best -way-to-do-a-substring-in-a-batch-file)在 StackOverflow 上。 (5认同)
  • 如果我需要 4 和 3 作为可变输入,我该怎么做?`%string:~%start%,%len%%` (3认同)
  • 总结@MakPo 的链接:使用`CALL`,例如`CALL SET _substring=%%_donor:~%_startchar%,%_length%%%` (3认同)
  • 没关系。我找到了答案。https://ss64.com/nt/syntax-substring.html (2认同)

小智 13

如果您只想要下划线之后的所有内容(并且不一定知道字符串的长度或下划线的位置,但可以依靠只有一个下划线),请尝试:

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)
Run Code Online (Sandbox Code Playgroud)

基本上,您的字符串将使用下划线作为分隔符 (delims=_) 拆分为标记。只有第二个(tokens=2)会被(作为变量 %%a)传递给 for 循环。由于在这种情况下您正在处理单个字符串,因此循环只会运行一次。

如果要保存下划线前后的内容,请尝试:

for /f "tokens=1,2 delims=_" %%a in ("%STRING%") do (
  set BEFORE_UNDERSCORE=%%a
  set AFTER_UNDERSCORE=%%b
)
Run Code Online (Sandbox Code Playgroud)

请注意,%%a 是拆分的第一个标记的变量;%%b 是拆分的第二个标记的变量。


Zim*_*mba 6

set var1=Abc_123
set var2=%var1:*_=%
echo %var2%
Run Code Online (Sandbox Code Playgroud)

  • 这具体有什么作用? (3认同)
  • 您的意思是留下 Abc_,就像 head 函数一样? (2认同)