Board logo

标题: [网络连接] [已解决]批处理获取ip地址并判断的代码,能否进一步简化? [打印本页]

作者: ygqiang    时间: 2011-12-28 10:44     标题: [已解决]批处理获取ip地址并判断的代码,能否进一步简化?

本帖最后由 ygqiang 于 2011-12-30 07:04 编辑
  1. for /f "tokens=2 delims=:" %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b
  2. echo %fsip%
  3. Set fsip=%fsip: =%
  4. echo 去掉ip前面的空格
  5. echo %fsip%
  6. if "%fsip%" == "10.10.9.200"   exit
  7. if "%fsip%" == "10.10.93.100"  exit
  8. if "%fsip%" == "10.10.94.200"  exit
  9. if "%fsip%" == "10.10.127.200" exit
  10. ;--------------------------------------------------------------------------------------------------
  11. for /f "tokens=15 delims= " %%i in ('ipconfig ^| find /i "IP Address"') do set i=%%i
  12. for /f "tokens=1,2,3 delims=." %%i in ("%i%") do (set a=%%i.%%j.%%k)
  13. set Gateway=%a%.1
  14. echo %a%.1
  15. if "%a%" == "10.10.9"   set a=%a%.200 & goto :next
  16. if "%a%" == "10.10.93"  set a=%a%.100 & goto :next
  17. if "%a%" == "10.10.94"  set a=%a%.200 & goto :next
  18. if "%a%" == "10.10.127" set a=%a%.200 & goto :next
  19. exit
  20. :next
复制代码
我要实现的目的是:

先判断ip地址是否是(10.10.9.200 10.10.93.100 10.10.94.200 10.10.127.200)其中的一个,如果是,就直接退出;如果不是,就继续下面的判断

判断ip地址前面三位是否是(10.10.9 10.10.93 10.10.94 10.10.127)其中的一个,如果是,就跳转到:next,否则就退出

上面的批处理,是否有简化的可能?谢谢
作者: awk    时间: 2011-12-28 15:41

你既然知道怎样用空格做为列分隔符获取IP地址,为何开头还要使用那么蛋疼的方法去替换空格呢?
作者: awk    时间: 2011-12-28 15:44

连续的4行if改成if...else...的结构,减少执行代码时浪费在毫无意义的重复判断上面的时间。
作者: ygqiang    时间: 2011-12-28 18:29

不好意思。

上面的代码,都是从论坛或者qq好友 获得的。

能否帮忙整体修改下?谢谢。
作者: ygqiang    时间: 2011-12-28 23:32

  1. for /f "tokens=2 delims=:" %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b
  2. echo %fsip%
  3. Set fsip=%fsip: =%
  4. echo 去掉ip前面的空格
  5. echo %fsip%
  6. echo "%fsip%"|findstr "10.10.9.200 10.10.93.100 10.10.94.200 10.10.127.200">nul&&exit
  7. 后面是别的代码
复制代码
这是有人给出的代码。
作者: awk    时间: 2011-12-29 09:30

  1. @echo off
  2. for /f "tokens=15 delims= " %%i in ('ipconfig ^| find /i "IP Address"') do (
  3.     set fsip=%%i
  4. )
  5. echo %fsip%
  6. if "%fsip%" equ "10.10.9.200" (
  7.     goto :end
  8. ) else if "%fsip%" equ "10.10.93.100" (
  9.     goto :end
  10. ) else if "%fsip%" equ "10.10.94.200" (
  11.     goto :end
  12. ) else if "%fsip%" equ "10.10.127.200" (
  13.     goto :end
  14. )
  15. for /f "tokens=1,2,3 delims=." %%i in ("%fsip%") do (
  16.     set a=%%i.%%j.%%k
  17. )
  18. set Gateway=%a%.1
  19. echo %a%.1
  20. if "%a%" equ "10.10.9" (
  21.     set a=%a%.200
  22. ) else if "%a%" equ "10.10.93" (
  23.     set a=%a%.100
  24. ) else if "%a%" equ "10.10.94" (
  25.     set a=%a%.200
  26. ) else if "%a%" equ "10.10.127" (
  27.     set a=%a%.200
  28. )
  29. :end
复制代码

作者: ygqiang    时间: 2011-12-29 23:36

本帖最后由 ygqiang 于 2011-12-30 10:09 编辑

多谢楼上。

初步测试,代码可以正常运行。
  1. @echo off
  2. :stat
  3. md d:\0beifen >nul 2>nul
  4. md d:\0beifen\soft >nul 2>nul
  5. copy /y 00-00robocopy.exe "c:\windows\system32\" >nul 2>nul
  6. copy /y 开通局域网共享(访问本机无需验证即可进入).reg "c:\WINDOWS\system32\" >nul 2>nul
  7. rem 获取本机ip
  8. for /f "tokens=14 delims=: " %%b in ('ipconfig^|find /i "ip"') do set fsip=%%b
  9. echo %fsip%
  10. pause
  11. rem 获取本机ip前3段
  12. for /f "tokens=1,2,3 delims=." %%i in ("%fsip%") do (
  13.     set a=%%i.%%j.%%k
  14. )
  15. echo %a%
  16. pause
  17. if "%fsip%" equ "10.10.9.200" (
  18.     goto :set0
  19. ) else if "%fsip%" equ "10.10.93.100" (
  20.     goto :set0
  21. ) else if "%fsip%" equ "10.10.94.200" (
  22.     goto :set0
  23. ) else if "%fsip%" equ "10.10.127.200" (
  24.     goto :set0
  25. )
  26. goto :set1
  27. cls
  28. ;--------------------------------------------------------------------------------------------------
  29. :set0
  30. ;--------------------------------------------------------------------------------------------------
  31. cls
  32. echo 设定文件服务器为:%fsip%
  33. pause
  34. regedit /s 开通局域网共享(访问本机无需验证即可进入).reg
  35. net user Guest /active:yes
  36. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v forceguest /t reg_dword /d 0  /f
  37. rem 取消“使用简单文件共享”方式
  38. net share soft=d:\0beifen\soft
  39. exit
  40. cls
  41. ;--------------------------------------------------------------------------------------------------
  42. :set1
  43. ;--------------------------------------------------------------------------------------------------
  44. cls
  45. if "%a%" equ "10.10.9" (
  46.     set a=%a%.200
  47. ) else if "%a%" equ "10.10.93" (
  48.     set a=%a%.100
  49. ) else if "%a%" equ "10.10.94" (
  50.     set a=%a%.200
  51. ) else if "%a%" equ "10.10.127" (
  52.     set a=%a%.200
  53. ) else (
  54.     echo 本机ip非设定范围!
  55.     exit
  56. )
  57. echo %a%
  58. pause
  59. :ptaget
  60. ping.exe %a% -n 1 -w 300 >nul&&goto :lineon||goto :lineoff
  61. :lineoff
  62. echo 文件服务器:%a%----离线
  63. pause
  64. ping 127.0.0.1 -n 60
  65. goto :ptaget
  66. cls
  67. ;--------------------------------------------------------------------------------------------------
  68. :lineon
  69. ;--------------------------------------------------------------------------------------------------
  70. cls
  71. echo 文件服务器:%a%----在线
  72. pause
  73. rem 创建文件夹的快捷方式
  74. cls
  75. SET link=%UserProfile%\桌面\常用软件.url  
  76. ECHO [InternetShortcut]>"%link%"
  77. ECHO URL=d:\0beifen\soft>>"%link%"
  78. ECHO WorkingDirectory=%SystemRoot%>>"%link%"
  79. ECHO ShowCommand=7>>"%link%"
  80. ECHO IconFile=C:\WINDOWS\system32\url.dll>>"%link%"
  81. ECHO IconIndex=^0>>"%link%"
  82. ECHO HotKey=>>"%link%"
  83. cls
  84. echo 文件服务器为:%a%,下载数据到本地
  85. pause
  86. :nextaaa
  87. ping.exe %a% -n 1 -w 300 >nul&&goto :lineon1||goto :lineoff1
  88. :lineoff1
  89. echo 文件服务器:%a%----离线
  90. ping 127.0.0.1 -n 120
  91. goto :nextaaa
  92. :lineon1
  93. 00-00robocopy "\\%a%\soft" "d:\0beifen\soft" /mir
  94. ping 127.0.0.1 -n 120
  95. goto :nextaaa
  96. ;--------------------------------------------------------------------------------------------------
  97. cls
复制代码

作者: awk    时间: 2011-12-30 09:16

回复 7# ygqiang


47行、82行可以删掉
作者: ygqiang    时间: 2011-12-30 10:10

多谢楼上。7楼已经重新更新了代码。




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