批处理 - 比较变量和正则表达式

时间:2014-04-19 11:51:13

标签: regex batch-file if-statement comparison

我正在做一个批处理脚本,必须检查计算机上是否安装了某些程序。为此,我执行programName --version并将输出存储在变量中。问题是当我尝试与正则表达式进行比较时(仅知道该程序是否存在于机器中)。我尝试使用此代码,但无法正常工作

>output.tmp node --version
<output.tmp (set /p hasNode= )
if "%hasNode%" == "[vV][0-9.]*" (echo Has node) else (echo You have to install node)

如果我更改正则表达式以使此命令的输出正常工作,那么我认为我对正则表达式的使用不好(我已经检查了它并且它没问题对于命令的输出)

感谢四位帮助人员

1 个答案:

答案 0 :(得分:7)

Batch / cmd不直接支持正则表达式。您必须使用findstr,例如:

echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1 && (echo contains) || (echo does not contain)

echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1 if errorlevel 1 (echo does not contain) else (echo contains)

这个技巧将比较委托给findstr,而不是使用返回代码(errorlevel) (请注意,正则表达式findstr支持也非常有限并且有一些怪癖,更多信息http://ss64.com/nt/findstr.html