纯批次:
for /f "delims==," %%A in ("%input:*test/time (ms)=%) do echo %%A
IN 子句中的搜索和替换查找第一次出现的test/time (ms)
并从原始字符串的开头替换到搜索字符串的结尾,没有任何内容。=
FOR /F 然后使用and的分隔符解析出 100 ,
。
值中包含引号%input%
导致 IN() 子句看起来很奇怪,没有可见的结束引号。
延迟扩展看起来更好:
setlocal enableDelayedExpansion
for /f "delims==," %%A in ("!input:*test/time (ms)=!") do echo %%A
我更喜欢在我的变量值中保留引号,并根据需要将它们显式添加到我的代码中。这使得普通扩展版本看起来更自然(延迟扩展版本保持不变):
set "input=test/ing=123, hello/world=321, test/time (ms)=100, test/status=0"
for /f "delims==," %%A in ("%input:*test/time (ms)=%") do echo %%A
在 JScript 的帮助下进行批处理
如果您有我的混合 JScript/batch REPL.BAT 实用程序,那么您可以使用正则表达式在您的解析中非常具体:
call repl ".*test/time \(ms\)=(.*?),.*" $1 sa input
要获取变量中的值:
set "val="
for /f "delims=" %%A in ('repl ".*test/time \(ms\)=(.*?),.*" $1 sa input') do set "val=%%A"
请注意,在 IN() 子句中不需要 CALL。使用管道时也不需要它。