我正在尝试验证传递给批处理文件的 IP 地址参数是否有效。不幸的是,尽管输入的正则表达式匹配,Windows findstr 并不能可靠地工作。
以下是所有结果的总结。
findstr 将 errorlevel 设置为 0 如果有匹配,如果没有匹配则设置为 1。
C:\iSTEP\VMTicketing\RealVNC>echo 192.10.10.10 | findstr /R "[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 192.101.101.101 | findstr /R "[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]"
192.101.101.101
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
0
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "[0-2][0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?"
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?"
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}*"
FINDSTR: No search strings
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
FINDSTR: No search strings
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}*"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\>"
C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1
使用 powershell regex 执行匹配的简单方法:
@Echo off
Call :Regex "131.21.1.101" "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
Echo(%Errorlevel%
Call :Regex "1321.101" "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
Echo(%Errorlevel%
Goto :Eof
:Regex
powershell.exe -noprofile -c "'%~1' -match '%~2'" | findstr /l "True" > nul || Exit /b 1
Exit /b 0
有关 powershell 正则表达式语法的详细信息,请参见此处
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句