标题: [其他] 批处理如何判断输入IP地址是否正确? [打印本页]
作者: sxdownloads 时间: 2010-5-13 15:01 标题: 批处理如何判断输入IP地址是否正确?
大家先看下这段代码,然后我再提问。关于windows下的Messenger发送信息的批处理。- @echo off
- COLOR 0A
- TITLE 信息发送工具
- :home
- echo.
- ECHO ………………………………………………………………………………………………………
- ECHO * 请选择要执行的操作 *
- ECHO ………………………………………………………………………………………………………
- ECHO * *
- ECHO * 1)单一发送 *
- ECHO * 2)群体发送 *
- ECHO * 0)退出 *
- ECHO * *
- ECHO ………………………………………………………………………………………………………
- echo.
- set choice=""
- set /p choice=请输入选择项:
- if /I "%choice%"=="1" goto :D
- if /I "%choice%"=="2" goto :Q
- if /I "%choice%"=="0" (exit) else (
- echo.
- echo 输入有误,请按任意键重新输入
- pause>nul
- cls
- goto home)
-
- :D
- set IP=""
- set /p ip=请输入需要发送的IP地址:
- set bv=内控部提醒您:今天您自查了吗?
- if /p %ip%="**.**.***.***" (goto send) else (
- echo.
- echo %ip% 不是标准的IP格式,请按任意键重新输入
- pause>nul
- goto D)
-
- :Q
- set IP=""
- set /p ip=请输入需要发送的IP地址:
- set bv=内控部提醒您:今天您自查了吗?
-
- :send
- net send %ip% %bv%
- pause
- cls
- goto home
复制代码
问题1
这个位置如果判断IP输入规则是否合正确,麻烦大侠帮我修改,我不会写了。- :D
- set IP=""
- set /p ip=请输入需要发送的IP地址:
- set bv=内控部提醒您:今天您自查了吗?
- if /p %ip%="**.**.***.***" (goto send) else (
- echo.
- echo %ip% 不是标准的IP格式,请按任意键重新输入
- pause>nul
- goto D)
复制代码
问题2
我想通过已经编辑好的另一文本文件里读取所有IP,并一起发送信息,请教应该如何写???- :Q
- set IP=""
- set /p ip=请输入需要发送的IP地址:
- set bv=内控部提醒您:今天您自查了吗?
复制代码
该文本里的存储格式为:
192.168.0.1
192.168.0.2
192.168.0.3
作者: hanyeguxing 时间: 2010-5-13 16:04
你的代码没看,只回答问题。
问题1:- @echo off
- :D
- set ip=&set n=&set m=
- set/p ip=请输入需要发送的IP地址:
- set "ip_=%ip:.=;%"
- for %%a in (%ip_%) do (
- set/a n+=1
- if %%a gtr 255 set m=1
- if %%a lss 0 set m=1
- )
- if %n% neq 4 set m=1
- if %m%==1 (
- echo.
- echo %ip% 不是标准的IP格式,请按任意键重新输入
- pause>nul
- goto:D
- )
复制代码
问题2:- for /F %%a in (a.txt) do echo.%%a
复制代码
作者: sxdownloads 时间: 2010-5-13 21:08
再麻烦问下,
问题1可以给我个完整代码吗?因为你给的代码中好像没有“set bv=内控部提醒您:今天您自查了吗?”这段和“goto send”这两段代码,应该加在什么位置??
问题2只需要加这一段代码就行吗???应该加在什么位置
[ 本帖最后由 sxdownloads 于 2010-5-13 21:18 编辑 ]
作者: sgaizxt001 时间: 2010-5-13 21:17
加到你的if判断IP那里if /p %ip%="**.**.***.***" (goto send) else (
不过要修改一下
我的建议是把这个代码完全放在你的批处理后面,然后在你想要设置输入IP时call这个代码,这样的话修改的地方少
[ 本帖最后由 sgaizxt001 于 2010-5-13 21:21 编辑 ]
作者: sgaizxt001 时间: 2010-5-13 21:26
set bv这一句可以放在前面设置就行了,用不着每个子代码都设置。
还有就是你们单位每台电脑都是自己做的系统吗?net send不一定能用
群体发送代码怎样输入多个IP?从文本读取吗?没有看到
作者: sgaizxt001 时间: 2010-5-13 21:42
- @echo off
- setlocal enabledelayedexpansion
- set "bv=内控部提醒您:今天您自查了吗?"
- :home
- ECHO ………………………………………………………………………………………………………
- ECHO * 请选择要执行的操作 *
- ECHO ………………………………………………………………………………………………………
- ECHO * *
- ECHO * 1)单一发送 *
- ECHO * 2)群体发送 *
- ECHO * 0)退出 *
- ECHO * *
- ECHO ………………………………………………………………………………………………………
- echo.
- set choice=""
- set /p choice=请输入选择项:
- if /I "%choice%"=="1" goto :D
- if /I "%choice%"=="2" goto :Q
- if /I "%choice%"=="0" (exit) else (
- echo.
- echo 输入有误,请按任意键重新输入
- pause>nul
- cls
- goto home)
-
-
- :D
- set ip=
- set/p ip=请输入IP地址:
- set ipp=!ip:.=!
- set ipp=!ipp:~0,6!
- if %ipp% equ 192168 (goto send) else (echo.IP输入错误 & goto D)
- goto :eof
-
- :Q
- for /f "delims=" %%a in (IP地址.txt) do (
- net send %%a %bv%
- )
- goto :eof
-
- :send
- net send %ip% %bv%
- pause
复制代码
单体发送我没设置发送过后继续循环,这个代码假设你单位的IP都是192.168的类型,如果你要设置循环的话把pause改为pause >nul & goto D。大部分都是抄袭你的,代码能运行,但是我这里的网络环境是不能发送的,无法实验能不能正确发送
[ 本帖最后由 sgaizxt001 于 2010-5-13 21:45 编辑 ]
作者: sxdownloads 时间: 2010-5-14 12:43
我单位局域网已经全部开启messenger服务,也就是说只要这段批处理正确,肯定能接收到信息。楼上的这位大侠再问一句:我单位的IP是:21.28.***.***的,如果按照这个IP的话,这段代码就不行,就算把这句“if %ipp% equ 192168 (goto send) else ”改成“if %ipp% equ 2128 (goto send) else ”也不对呀,不懂什么意思
[ 本帖最后由 sxdownloads 于 2010-5-14 14:06 编辑 ]
作者: sgaizxt001 时间: 2010-5-14 20:01
因为我是把IP的“.”去掉变成一串字符,截取位数是前6个。
set ipp=!ip:.=!
set ipp=!ipp:~0,4!
if %ipp% equ 2128
就可以了
还可以截取IP剩余的位数来判断是否大于255255或者小于0来再度提示输入错误。如果不想做过多改动的话,放在if %ipp% equ 2128之前先判断错误就提示后两位错误,返回继续输入,正确就算,继续执行下一条语句
[ 本帖最后由 sgaizxt001 于 2010-5-14 20:04 编辑 ]
作者: wbh 时间: 2012-9-15 00:18
如果分隔符输入错误怎么处理?实心小圆点变成了空心小圆点,该怎么处理?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |