2011-01-04 02:42:12 +0000 2011-01-04 02:42:12 +0000
28
28

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

假设我有一个值,比如 “Abc_123",存储在一个批处理(cmd)文件的变量中。我想最终得到一个只包含 "123 "的变量。有什么内置的方法可以做到这一点吗?

我对方法或性能不是很挑剔,只要它是内置于典型的Windows(Vista/2008)系统中就可以了。

答案 (4)

39
39
39
2011-01-04 02:58:22 +0000

使用子串语法。

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123
7
7
7
2018-07-02 15:51:27 +0000

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

for /f "tokens=2 delims=_" %%a in ("%STRING%") do (
  set AFTER_UNDERSCORE=%%a
)

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

如果你想同时保存下划线前后的内容,可以试试。

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

注意%%a是分割后第一个标记的变量;%%b是分割后第二个标记的变量。

3
3
3
2011-01-04 03:14:44 +0000

如果你发现批处理语言的功能不够强大,无法完成你想要的事情–而且很可能不会花费你太多时间来达到这个目的–你可以使用 Windows PowerShell 。这并不是所有版本的Windows都默认安装的,但你可以免费下载它。

如果你不喜欢PowerShell语言,还有Perl。不过你必须在所有系统上安装它。还有其他的。

1
1
1
2019-10-29 13:32:58 +0000
set var1=Abc_123
set var2=%var1:*_=%
echo %var2%