28
28
如何在Windows批处理文件中提取字符串的一部分?
假设我有一个值,比如 “Abc_123",存储在一个批处理(cmd)文件的变量中。我想最终得到一个只包含 "123 "的变量。有什么内置的方法可以做到这一点吗?
我对方法或性能不是很挑剔,只要它是内置于典型的Windows(Vista/2008)系统中就可以了。
假设我有一个值,比如 “Abc_123",存储在一个批处理(cmd)文件的变量中。我想最终得到一个只包含 "123 "的变量。有什么内置的方法可以做到这一点吗?
我对方法或性能不是很挑剔,只要它是内置于典型的Windows(Vista/2008)系统中就可以了。
如果你只想要下划线之后的所有内容(而且不一定知道字符串的长度或下划线的位置,但可以依靠只有一个下划线),可以试试。
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是分割后第二个标记的变量。
如果你发现批处理语言的功能不够强大,无法完成你想要的事情–而且很可能不会花费你太多时间来达到这个目的–你可以使用 Windows PowerShell 。这并不是所有版本的Windows都默认安装的,但你可以免费下载它。
如果你不喜欢PowerShell语言,还有Perl。不过你必须在所有系统上安装它。还有其他的。