
[已解決]批處理findstr命令正則方式怎樣識別IP地址最后由 mxxcgzxxx 于 -6-28 07:08我想用正則識別IP的輸入正確性,寫了以下程序,識別范圍 1.0.0.1~255.255.255.254給了出錯信息“輸入行太長”首先說明方法沒錯,用這個方法,只識別1.0.0.~255.255.255. 能正確識別
想問以下幾個問題:(1) findstr 正則表達式能支持多長的字符串?(2) 有更簡易高效的識別方法嗎?(3) 能通過多通道進行多層篩選達到相同的效果嗎?(4) 如果可能的話,我想拓展成識別(10.0.0.1~10.255.255.254) (172.16.0.1~172.31.255.254) (192.168.0.1~192.168.255.254) 讓這三段地址同時有效,其他一律排除同時點發現共享下,不知和你們的一樣不:多次測試發現單次 findstr 正則 時間基本在0.12秒,所以不用FOR的情況下正則比FOR+IF排選更快,如果在FOR下進行正則就速度很慢了,因為速度為n*0.12 秒nclick="copycode($('code0'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- set ip11=^2[0-5][0-5]
- set ip12=^1[0-9][0-9]
- set ip13=^[1-9][0-9]
- set ip14=^[1-9]
- set ip21=2[0-5][0-5]
- set ip22=1[0-9][0-9]
- set ip23=[1-9][0-9]
- set ip24=[0-9]
- set ip31=2[0-5][0-5]
- set ip32=1[0-9][0-9]
- set ip33=[1-9][0-9]
- set ip34=[1-9]
- set ip41=2[0-5][0-4]$
- set ip42=1[0-9][0-9]$
- set ip43=[1-9][0-9]$
- set ip44=[1-9]$
- set ipyu=
- for /l %%a in (1,1,4) dofor /l %%b in (1,1,4) do for /l %%c in (1,1,4) do for /l %%d in (1,1,4) do set ipyu=!ip1%%a![.]!ip2%%b![.]!ip3%%c![.]!ip4%%d! !ipyu!
- set ipyu
- pause
- :1
- set/p p=
- echo %p%| findstr %ipyu%>nul && echo %p% 正確
- pause
- goto :1

