中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-20 21:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 讨论:用findstr 判断输入的ip是否合法 查看 2,851 回复 36
16 发表于 2008-05-09 17:06 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
它说了是Regular expression,也说了是“快速参考”,所以我觉得好歹不应该只有这一点的。
但可惜一直找不到它具体支持的列表
17 发表于 2008-05-09 17:14 ·  中国 江苏 苏州 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
基本就那么多吧
?,/d /w /n /r 很多都没用
18 发表于 2008-05-10 01:46 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
在CU潜水时看到的:

匹配IP地址
\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)
\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)
19 发表于 2008-05-10 02:42 ·  中国 广西 南宁 电信
中级用户
★★
丶杏灬丶
积分 280
发帖 105
注册 2008-05-06 03:37
18年会员
UID 117858
性别 男
来自 广西
状态 离线
findstr这个命令我用的少~~
20 发表于 2008-05-10 11:58 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
18楼 HAT 兄弟,能给个完整代码吗?我用你的测试怎么都不对啊??
致精致简!
21 发表于 2008-05-10 12:19 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这样呢
findstr "^*\.*\.*\.*$"
@echo off
set /p ip=请输入IP:
echo %ip%|findstr "^*\.*\.*\.*$">nul||goto err
set ip1=%ip:.= %
call:lp %ip1%
:lp
if "%4"=="" echo ip格式不对&pause&exit
echo 正确
pause&exit
:err
echo ip格式不对&pause&exit

[ Last edited by terse on 2008-5-10 at 12:21 PM ]
简单!简单!再简单!
22 发表于 2008-05-10 12:55 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Originally posted by terse at 2008-5-10 12:19:
这样呢
findstr "^*\.*\.*\.*$"
@echo off
set /p ip=请输入IP:
echo %ip%|findstr "^*\.*\.*\.*$">nul||goto err
set ip1=%ip:.= ...


256.256.256.256

正确=。=
23 发表于 2008-05-10 13:14 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@echo off
set /p ip=请输入IP:
echo %ip%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto err
set ip1=%ip:.= %
call:lp %ip1%
:lp
if %1 GEQ 232 echo ip格式不对&pause&exit
if %2 GEQ 255 echo ip格式不对&pause&exit
if %3 GEQ 255 echo ip格式不对&pause&exit
if %4 GEQ 255 echo ip格式不对&pause&exit
echo 正确
pause&exit
:err
echo ip格式不对&pause&exit
24 发表于 2008-05-10 13:21 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by slore at 2008-5-10 13:14:
@echo off
set /p ip=请输入IP:
echo %ip%|findstr "^*\.*\.*\.*$">nul||goto err
set ip1=%ip:.= %
call:lp %ip1%
:lp
if %1 GEQ 232 echo ip格式不对&pau ...

如果考虑255以上情况 可以简化一下IP标签下
@echo off
set /p ip=请输入IP:
echo %ip%|findstr "^*\.*\.*\.*$">nul||goto err
set ip1=%ip:.= %
call:lp %ip1%
:lp
if "%4"=="" goto err
for %%i in (%ip1%) do if %%i gtr 255 goto err
echo 正确
pause&exit
:err
echo ip格式不对&pause&exit

[ Last edited by terse on 2008-5-10 at 01:23 PM ]
简单!简单!再简单!
25 发表于 2008-05-10 13:24 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
Originally posted by HAT at 2008-5-10 01:46 AM:
在CU潜水时看到的:

匹配IP地址
\(\{1,3\}\.\{1,3\}\.\{1,3\}\.\{1,3\}\)
\(\(\{1,3\}\.\)\{3\}\{1,3\}\)


测试失败……

首先应该没有换行……
将转义字符“\”弄回去后
({1,3}.{1,3}.{1,3}.{1,3})(({1,3}.){3}{1,3})

但findstr 貌似不支持 {N} 以及分组,所以这个用不了
正在潜水修练的批处理小白
26 发表于 2008-05-10 13:26 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
就是想直接用findstr就判断出格式是否正确,
写了个自己都看不懂的代码,但却可以达到效果。

@echo off
set /p ip=输入ip
set "num=^*\.*\.*\.*$"
echo %ip%|findstr /x "%num%">nul&&echo ip 正确||echo ip 错误
pause
致精致简!
27 发表于 2008-05-10 13:41 ·  中国 广东 广州 天河区 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
[0-9]*[0-9]

所匹配的是数字,且至少是1位,可以是2、3……N位
正在潜水修练的批处理小白
28 发表于 2008-05-10 13:44 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
27 楼 没注意楼主要求吧,不需要判断数字的位数,当然能判断更好。
致精致简!
29 发表于 2008-05-10 17:01 ·  中国 北京 联通
社区乞丐
积分 -61
发帖 37
注册 2008-04-19 17:10
18年会员
UID 116329
性别 男
状态 离线
新手,请各路大侠指教

@echo off&setlocal
:begin
set/p ip=输入IP Address (Format:xxx.xxx.xxx.xxx):
if not defined ip (goto begin)
echo/%ip%|findstr /r "^*\.*\.*\.*$" >nul 2>&1||goto begin
for %%a in ("%ip:.=" "%") do call :QF %%a
echo %keep:~1%
goto:eof
:QF
for /f "delims=0 tokens=*" %%b in (%1) do (
set a=%%b
if not defined a (call:FQ 0) else call:FQ %%b
)
goto:eof
:FQ
if %1 gtr 255 (cls&&echo 错误IP地址如下:)
set keep=%keep%.%1


[ Last edited by FQ on 2008-5-10 at 10:39 PM ]
30 发表于 2008-05-10 18:48 ·  中国 广东 佛山 禅城区 电信
初级用户
积分 87
发帖 42
注册 2008-05-07 23:37
18年会员
UID 118057
性别 男
状态 离线
findstr还不怎么会用,谁懂的发个贴来介绍介绍
论坛跳转: