[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理如何判断输入IP地址是否正确?

大家先看下这段代码,然后我再提问。关于windows下的Messenger发送信息的批处理。
  1. @echo off
  2. COLOR 0A
  3. TITLE 信息发送工具
  4. :home
  5. echo.
  6. ECHO  ………………………………………………………………………………………………………
  7. ECHO  *                              请选择要执行的操作                            *
  8. ECHO  ………………………………………………………………………………………………………
  9. ECHO  *                                                                            *
  10. ECHO  *   1)单一发送                                                               *
  11. ECHO  *   2)群体发送                                                               *
  12. ECHO  *   0)退出                                                                   *
  13. ECHO  *                                                                            *
  14. ECHO  ………………………………………………………………………………………………………
  15. echo.
  16. set choice=""
  17. set /p choice=请输入选择项:
  18. if /I "%choice%"=="1" goto :D
  19. if /I "%choice%"=="2" goto :Q
  20. if /I "%choice%"=="0" (exit) else (
  21. echo.
  22. echo 输入有误,请按任意键重新输入
  23. pause>nul
  24. cls
  25. goto home)
  26. :D
  27. set IP=""
  28. set /p ip=请输入需要发送的IP地址:
  29. set bv=内控部提醒您:今天您自查了吗?
  30. if /p %ip%="**.**.***.***" (goto send) else (                  
  31. echo.
  32. echo %ip% 不是标准的IP格式,请按任意键重新输入
  33. pause>nul
  34. goto D)
  35. :Q
  36. set IP=""
  37. set /p ip=请输入需要发送的IP地址:
  38. set bv=内控部提醒您:今天您自查了吗?
  39. :send
  40. net send %ip% %bv%
  41. pause
  42. cls
  43. goto home
复制代码
问题1

    这个位置如果判断IP输入规则是否合正确,麻烦大侠帮我修改,我不会写了。
  1. :D
  2. set IP=""
  3. set /p ip=请输入需要发送的IP地址:
  4. set bv=内控部提醒您:今天您自查了吗?
  5. if /p %ip%="**.**.***.***" (goto send) else (                  
  6. echo.
  7. echo %ip% 不是标准的IP格式,请按任意键重新输入
  8. pause>nul
  9. goto D)
复制代码
问题2
     我想通过已经编辑好的另一文本文件里读取所有IP,并一起发送信息,请教应该如何写???
  1. :Q
  2. set IP=""
  3. set /p ip=请输入需要发送的IP地址:
  4. set bv=内控部提醒您:今天您自查了吗?
复制代码
该文本里的存储格式为:
192.168.0.1
192.168.0.2
192.168.0.3

你的代码没看,只回答问题。
问题1:
  1. @echo off
  2. :D
  3. set ip=&set n=&set m=
  4. set/p ip=请输入需要发送的IP地址:
  5. set "ip_=%ip:.=;%"
  6. for %%a in (%ip_%) do (
  7. set/a n+=1
  8. if %%a gtr 255 set m=1
  9. if %%a lss 0 set m=1
  10. )
  11. if %n% neq 4 set m=1
  12. if %m%==1 (                  
  13. echo.
  14. echo %ip% 不是标准的IP格式,请按任意键重新输入
  15. pause>nul
  16. goto:D
  17. )
复制代码
问题2:
  1. for /F %%a in (a.txt) do echo.%%a
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

再麻烦问下,
问题1可以给我个完整代码吗?因为你给的代码中好像没有“set bv=内控部提醒您:今天您自查了吗?”这段和“goto send”这两段代码,应该加在什么位置??

问题2只需要加这一段代码就行吗???应该加在什么位置

[ 本帖最后由 sxdownloads 于 2010-5-13 21:18 编辑 ]

TOP

加到你的if判断IP那里if /p %ip%="**.**.***.***" (goto send) else (
不过要修改一下

我的建议是把这个代码完全放在你的批处理后面,然后在你想要设置输入IP时call这个代码,这样的话修改的地方少

[ 本帖最后由 sgaizxt001 于 2010-5-13 21:21 编辑 ]
努力学习,努力挣分

TOP

set bv这一句可以放在前面设置就行了,用不着每个子代码都设置。
还有就是你们单位每台电脑都是自己做的系统吗?net send不一定能用
群体发送代码怎样输入多个IP?从文本读取吗?没有看到
努力学习,努力挣分

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "bv=内控部提醒您:今天您自查了吗?"
  4. :home
  5. ECHO  ………………………………………………………………………………………………………
  6. ECHO  *                              请选择要执行的操作                            *
  7. ECHO  ………………………………………………………………………………………………………
  8. ECHO  *                                                                            *
  9. ECHO  *   1)单一发送                                                               *
  10. ECHO  *   2)群体发送                                                               *
  11. ECHO  *   0)退出                                                                   *
  12. ECHO  *                                                                            *
  13. ECHO  ………………………………………………………………………………………………………
  14. echo.
  15. set choice=""
  16. set /p choice=请输入选择项:
  17. if /I "%choice%"=="1" goto :D
  18. if /I "%choice%"=="2" goto :Q
  19. if /I "%choice%"=="0" (exit) else (
  20. echo.
  21. echo 输入有误,请按任意键重新输入
  22. pause>nul
  23. cls
  24. goto home)
  25. :D
  26. set ip=
  27. set/p ip=请输入IP地址:
  28. set ipp=!ip:.=!
  29. set ipp=!ipp:~0,6!
  30. if %ipp% equ 192168 (goto send) else (echo.IP输入错误 & goto D)
  31. goto :eof
  32. :Q
  33. for /f "delims=" %%a in (IP地址.txt) do (
  34. net send %%a %bv%
  35. )
  36. goto :eof
  37. :send
  38. net send %ip% %bv%
  39. pause
复制代码

单体发送我没设置发送过后继续循环,这个代码假设你单位的IP都是192.168的类型,如果你要设置循环的话把pause改为pause >nul & goto D。大部分都是抄袭你的,代码能运行,但是我这里的网络环境是不能发送的,无法实验能不能正确发送

[ 本帖最后由 sgaizxt001 于 2010-5-13 21:45 编辑 ]
努力学习,努力挣分

TOP

我单位局域网已经全部开启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 编辑 ]

TOP

因为我是把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 编辑 ]
努力学习,努力挣分

TOP

如果分隔符输入错误怎么处理?实心小圆点变成了空心小圆点,该怎么处理?

TOP

返回列表