中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (求教)检测IP格式是否正确批处理的问题
作者:
标题: (求教)检测IP格式是否正确批处理的问题 上一主题 | 下一主题
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『楼 主』:  (求教)检测IP格式是否正确批处理的问题

@echo off
:: 检测IP格式是否标准
:: code by jm 2006-10-23
:begin
cls
set input=
set /p input=请输入IP:
echo %input%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto fail
set _input=%input:.= %
call :check %_input%

:check
if "%4"=="" goto fail
for %%i in (%1 %2 %3 %4) do (
    if %%i gtr 255 goto fail
)
cls
echo %input% 是正确的IP
echo.
pause
goto begin

:fail
cls
echo %input% 是错误的IP
echo.
pause
goto begin



这段代码如何改才能实现只判断一次就退出??
偶改完后发现如果IP正确要再判断一次!
改后:
@echo off
:: 检测IP格式是否标准
:: code by jm 2006-10-23
:begin
cls
set input=
set /p input=请输入IP:
echo %input%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto fail
set _input=%input:.= %
call :check %_input%

:check
if "%4"=="" goto fail
for %%i in (%1 %2 %3 %4) do (
    if %%i gtr 255 goto fail
)
cls
echo %input% 是正确的IP
echo.
pause
goto end

:fail
cls
echo %input% 是错误的IP
echo.
pause


:end

[ Last edited by lg560852 on 2007-7-27 at 11:26 AM ]

2007-7-27 11:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 2 楼』:  

这是偶又调试时的情况
修改后:
::@echo off
:: 检测IP格式是否标准
:: code by jm 2006-10-23
:begin
::cls
set input=
set /p input=请输入IP:
echo %input%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto fail
set _input=%input:.= %
call :check %_input%

:check
if "%4"=="" goto fail
for %%i in (%1 %2 %3 %4) do (
    if %%i gtr 255 goto fail
)
::cls
echo %input% 是正确的IP
echo.
pause
goto end

:fail
::cls
echo %input% 是错误的IP
echo.
pause


:end


执行结果:

C:\Documents and Settings\桌面>set input=

C:\Documents and Settings\桌面>set /p input=请输入IP:
请输入IP:1.1.1.1

C:\Documents and Settings\桌面>echo 1.1.1.1  | findstr "^[0-9]*\.[0-9]*
9]*\.[0-9]*$" 1>nul  || goto fail

C:\Documents and Settings\桌面>set _input=1 1 1 1

C:\Documents and Settings\桌面>call :check 1 1 1 1

C:\Documents and Settings\桌面>if "1" == "" goto fail

C:\Documents and Settings\桌面>for %i in (1 1 1 1) do (if %i GTR 255 go
il )

C:\Documents and Settings\桌面>(if 1 GTR 255 goto fail )

C:\Documents and Settings\桌面>(if 1 GTR 255 goto fail )

C:\Documents and Settings\桌面>(if 1 GTR 255 goto fail )

C:\Documents and Settings\桌面>(if 1 GTR 255 goto fail )

C:\Documents and Settings\桌面>echo 1.1.1.1 是正确的IP
1.1.1.1 是正确的IP

C:\Documents and Settings\桌面>echo.


C:\Documents and Settings\桌面>pause
请按任意键继续. . .

C:\Documents and Settings\桌面>goto end

C:\Documents and Settings\桌面>if "" == "" goto fail

C:\Documents and Settings\桌面>echo 1.1.1.1 是错误的IP
1.1.1.1 是错误的IP

C:\Documents and Settings\桌面>echo.


C:\Documents and Settings\桌面>pause
请按任意键继续. . .

2007-7-27 11:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 3 楼』:  

这里为什么又调用了一次check

2007-7-27 11:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 4 楼』:  

因为这里call :check %_input%了

call完后,就自动回到call的下一行了

2007-7-27 11:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 5 楼』:  

那应该怎么改呢??

2007-7-27 11:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 6 楼』:  

call :check %_input%
goto end

2007-7-27 11:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 7 楼』:  

多谢达人指教!!

2007-7-27 11:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: