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

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

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

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

答案1

使用子字符串语法:

C:\Users\John>set string=Abc_123

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

C:\Users\John>echo %string:~4,3%
123

答案2

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

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

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

如果您想保存下划线之前和之后的内容,请尝试:

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

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

答案3

set var1=Abc_123
set var2=%var1:*_=%
echo %var2%

答案4

如果你发现批处理语言不够强大,无法完成你想要的功能 - 而且很可能不会花太长时间就能达到这一点 - 你可以使用Windows PowerShell。并非所有版本的 Windows 都默认安装此功能,但您可以免费下载。

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

相关内容