我想根据批处理脚本中给定字符串的模式提取子字符串。
示例:
Input : ABCDEF-x32-32.12.20-298-date-20-12-17.exe
Required Output : 32.12.20-298 (i.e. <number>.<number>.<number>-<number>)
Regex (may be) : [0-9]+\.[0-9]+\.[0-9]+-[0-9]+
如何在批处理脚本中实现这一点???我尝试使用&#39; For&#39;和&#39; findstr&#39;但未能这样做。
答案 0 :(得分:2)
Windows批处理没有一个好的正则表达式工具。 FINDSTR命令具有非常有限(非标准和错误)的正则表达式支持。它只能返回包含匹配项的整行。
本机Windows脚本语言确实有很好的支持。 PowerShell肯定会这样做,JScript和VBScript也是如此(可通过CSCRIPT获得)。
如果您真的想要在批处理文件中使用基于纯脚本的正则表达式解决方案,那么您可以使用JREPL.BAT。混合批处理/ JScript可以方便地将JScript正则表达式的强大功能带到批处理世界。
完整文档可通过jrepl /?
或jrepl /??
获取,以获取分页帮助。另一个重要的帮助命令是jrepl /?options
以获取所有可用选项的摘要,而jrepl /?help
可以获得所有可用帮助的摘要。
通常,JREPL用于执行查找/替换操作。但/MATCH
选项忽略了所需的替换字符串,只输出匹配的文本。
通常JREPL从stdin或文件读取。但是/S
选项从变量中读取输入。
输出通常是stdout或文件。但是/RTN
选项将结果保存到环境变量中(整个结果必须在~8kb内)。
@echo off
setlocal
set "str=ABCDEF-x32-32.12.20-298-date-20-12-17.exe"
:: Extract the string and print to the screen
call jrepl "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" "" /match /s str
:: Extract the string and store it in variable out.
call jrepl "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+" "" /match /s str /rtn out