使用batch命令查找正则表达式的最后一个匹配项

时间:2015-06-18 04:44:31

标签: regex windows batch-file cmd

这是我的C ++头文件。我需要阅读 last #define NONPROD并将定义的值设置为%nonprod%variable。在这种情况下,%nonprod%应包含值1%file%是文件路径。

#if PROD == 1
    #define NONPROD 0
#else
    #define NONPROD 1
#endif

这是我创建的批处理脚本。似乎正则表达式有问题。

for /f "usebackq tokens=3" %%i in (`findstr "/c:^ *#define  *NONPROD  *[01]$" /r "%file%" 2^>nul`) do set nonprod=%%i

任何帮助?

1 个答案:

答案 0 :(得分:1)

由于源代码中行的开头似乎有标签,您的条件必须包含它们,或者您可以搜索近似行,然后,因为空格和制表符都是for /f命令中的分隔符,检查行标记是否与搜索条件匹配

for /f "tokens=1-4" %%a in ('
    findstr /r /c:"^.*#define.*NONPROD.*[0-9][0-9]*.*$" "%file%" 2^>nul
') do if "%%a"=="#define" if "%%b"=="NONPROD" if "%%d"=="" set "nonprod=%%c"