我正在编写一个批处理脚本,必须检查计算机上是否安装了某些程序。为此,我执行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)
如果我更改此命令输出的正则表达式可以正常工作,那么我认为我对正则表达式的使用不当(我已经检查过它并且对于命令的输出来说没有问题)
谢谢你们的帮助
Batch/cmd 不直接支持正则表达式。你必须使用findstr
为此,例如:
echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1 && (echo contains) || (echo does not contain)
or
echo %node% | findstr /r "[vV][0-9.]*" >nul 2>&1
if errorlevel 1 (echo does not contain) else (echo contains)
这个技巧将比较委托给findstr
然后使用它的返回代码(错误级别)。
(请注意正则表达式findstr
支持也相当有限,并且有一些怪癖,更多信息http://ss64.com/nt/findstr.html http://ss64.com/nt/findstr.html)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)