假设我有一个值,例如“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。不过您必须在所有系统上安装它。还有其他语言。