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

6

我正在编写一个批处理脚本,需要检查计算机上是否安装了某些程序。为此,我执行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个回答

11

批处理/cmd不直接支持正则表达式,你需要使用findstr,例如:

echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1 && (echo 包含) || (echo 不包含) 或者

echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1 if errorlevel 1 (echo 不包含) else (echo 包含)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接