Board logo

标题: [网络连接] 批处理如何在断网或者网卡被禁用取不到IP的情况下正常的显示? [打印本页]

作者: Speed乄Jay    时间: 2017-9-6 18:07     标题: 批处理如何在断网或者网卡被禁用取不到IP的情况下正常的显示?

  1. @echo off
  2. ::首页显示IP地址
  3. for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0')do for /f "tokens=3 delims=." %%b in ("%%a") do (set IP1=%%b)
  4. for /f "tokens=4" %%c in ('route print^|findstr 0.0.0.0.*0.0.0.0')do for /f "tokens=4 delims=." %%d in ("%%c") do (set IP2=%%d)
  5. for /f "tokens=3" %%e in ('route print^|findstr 0.0.0.0.*0.0.0.0')do (set getway=%%e)
  6. for /f "tokens=4" %%f in ('route print^|findstr 0.0.0.0.*0.0.0.0')do (set IP=%%f)
  7. set a= %IP1%
  8. set b= %IP2%
  9. set c=1
  10. if %IP1%==27 (set /a c=4)
  11. if %IP1%==28 (set /a c=3)
  12. if %IP1%==29 (set /a c=2)
  13. set /a d=%b%-50
  14. set /a e=%b%-10
  15. if %b% gtr 139 (set /a b=d) else (set /a b=e)
  16. echo 台席号:%c%楼%b%号
  17. echo IP地址:%IP%
  18. echo 网关:%getway%
  19. pause
复制代码
这是小弟写的一个脚本,根据IP来判断和显示所对应的台席号,目前有个问题,如果电脑在断网或者网卡被禁用的情况下,这段脚本就无法执行下去 ,请教各位高手、版主大大,如果如何在断网或者网卡被禁用的情况下抓取不到IP地址还能正常的显示一段提示比如:无法获取此台席IP地址...这样类似的提示,让后面的代码能够顺利的运行。
作者: Batcher    时间: 2017-9-6 20:21

断网或者网卡被禁用的情况下,删掉 @echo off 看看到哪一步出错了,加个 if 判断。
作者: Speed乄Jay    时间: 2017-9-7 08:36

回复 2# Batcher


    好的,我去掉看看,不知道if如何落笔。。。。
作者: Speed乄Jay    时间: 2017-9-7 09:57

回复 2# Batcher



执行到这 a 和 b都等于 ,我在下面做了判断如果a和b都等于空的话,给他赋值,
  1. if %a%==%null% (set /a a=0)
  2. if %b%==%null% (set /a b=0)
复制代码
可还是没用,请问大大,我这样写的有问题吗?
作者: Batcher    时间: 2017-9-7 20:27

回复 4# Speed乄Jay


语法上应该是这样比较好:
  1. if "%a%"=="" (set a=0)
复制代码
至于能否解决问题,你先测试一下吧。
作者: Batcher    时间: 2017-9-7 20:28

回复 3# Speed乄Jay


这里有 if 命令的教程:
http://bbs.bathome.net/thread-2576-1-1.html
作者: Speed乄Jay    时间: 2017-9-7 22:25

回复 5# Batcher


    我试了,把网卡禁用掉,a和b就又什么东西都没获取到,最后把代码改成下面这样,也不行。
  1. ::首页显示IP地址
  2. for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0')do for /f "tokens=3
  3. delims=." %%b in ("%%a") do (if "%%b"=="" (set IP1=%%b+1) else (set IP1=%%b))
  4. for /f "tokens=4" %%c in ('route print^|findstr 0.0.0.0.*0.0.0.0')do for /f "tokens=4
  5. delims=." %%d in ("%%c") do (if "%%d"=="" (set IP1=%%d+1) else (set IP2=%%d))
  6. for /f "tokens=3" %%e in ('route print^|findstr 0.0.0.0.*0.0.0.0')do (set getway=%%e)
  7. for /f "tokens=4" %%f in ('route print^|findstr 0.0.0.0.*0.0.0.0')do (set IP=%%f)
  8. set a=%IP1%
  9. set b=%IP2%
  10. set c=1
  11. if %IP1%==27 (set /a c=4)
  12. if %IP1%==28 (set /a c=3)
  13. if %IP1%==29 (set /a c=2)
  14. set /a d=%b%-50
  15. set /a e=%b%-10
  16. if %b% geq 140 (set /a b=d) else (set /a b=e)
  17. echo 台席号:%c%楼%b%号
  18. echo IP地址:%IP%
  19. echo 网关:%getway%
  20. pause
复制代码
头好大啊。
作者: Batcher    时间: 2017-9-8 07:24

回复 7# Speed乄Jay


    用5楼的方法在获取不到a和b的时候提示:无法获取此台席IP地址。你的原始需求不是这样的吗?
作者: 不知道是谁    时间: 2017-9-8 18:00

本帖最后由 不知道是谁 于 2017-9-8 18:10 编辑

回复 7# Speed乄Jay

翻了下自用的一个批处理,断网状态下是可以的,但如果是禁用掉那就不行了
你可以测试下
netsh interface ip show config
  1. rem 搜索内网DNS,如果未找到则判断为外网
  2. netsh interface ip show config|findstr "10.137.252.3 10.137.195.7" >nul&&goto lan
  3. echo 可能是外网设备,不进行额外设置. . .
  4. goto end
复制代码

作者: Speed乄Jay    时间: 2017-9-10 08:24

回复 9# 不知道是谁


    多谢。
作者: Speed乄Jay    时间: 2017-9-10 08:25

回复 8# Batcher


    对。现在只要是断网或者网卡被禁用就出现问题了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2