Board logo

标题: [网络连接] 【已解决】获取IP地址信息再更改IP地址批处理。 [打印本页]

作者: 小智BAT    时间: 2014-10-8 15:54     标题: 【已解决】获取IP地址信息再更改IP地址批处理。

本帖最后由 小智BAT 于 2014-10-14 06:47 编辑

大家帮忙测试下,如有建议都提出来。

代码已经更新这个看,看看有还有什么问题??
  1. @echo off
  2. title IP自动改手动批处理。
  3. color 0a
  4. ver | find "5.1." > NUL &&  goto show51
  5. ver | find "6.1." > NUL &&  goto show61
  6. :show51
  7. @echo 当前系统是:[WindowsXP ]
  8. echo ------------------------
  9. echo 正在获取本地连接地址信息:
  10. set "w1=wmic nic where "NetConnectionID='本地连接'" get Index"
  11. for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
  12. set "w2=wmic nicconfig where "Index='%n%'" get DNSServerSearchOrder^,DefaultIPGateway^,IPAddress^,IPSubnet"
  13. for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
  14. echo ============================
  15. echo,IP地址:%IPAddress%
  16. echo,子网:%IPSubnet%
  17. echo,网关:%DefaultIPGateway%
  18. echo,DNS:%DNSServerSearchOrder%
  19. echo 正在修改为手动IP地址
  20. netsh interface ip set address name="本地连接" source=static addr=%IPAddress% mask=%IPSubnet%
  21. netsh interface ip set address name="本地连接" gateway=%DefaultIPGateway% gwmetric=0
  22. echo 正在修改DNS为:%DNSServerSearchOrder%和114.114.114.114
  23. netsh interface ip set dns name="本地连接" source=static addr=%dns%
  24. netsh interface ip add dns name="本地连接" addr=114.114.114.114
  25. pause & exit
  26. :show61
  27. @echo 当前系统是:[Windows7 ]
  28. echo ------------------------
  29. echo 正在获取本地连接地址信息:
  30. set "w1=wmic nic where "NetConnectionID='本地连接'" get Index"
  31. for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
  32. set "w2=wmic nicconfig where "Index='%n%'" get DNSServerSearchOrder^,DefaultIPGateway^,IPAddress^,IPSubnet"
  33. for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
  34. echo ============================
  35. echo,IP地址:%IPAddress%
  36. echo,子网:%IPSubnet%
  37. echo,网关:%DefaultIPGateway%
  38. echo,DNS:%DNSServerSearchOrder%
  39. echo ============================
  40. goto workdo
  41. :workdo
  42. set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
  43. set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."
  44. echo %IPAddress%|findstr "%pattern_包含%"|findstr /v "%pattern_排除%"|findstr /v "[0-9][0-9][0-9][0-9] [3-9][0-9][0-9] 2[6][0-9] 25[6-9]" && goto workip || echo 本地连
  45. 接网络没连接或者网线没拆好。&goto exitip
  46. :workip
  47. echo 正在修改为手动IP地址:%IPAddress% %IPSubnet% %DefaultIPGateway% %DNSServerSearchOrder%
  48. netsh interface ip set address name="本地连接" source=static addr=%IPAddress% mask=%IPSubnet% gateway=%DefaultIPGateway% gwmetric=1
  49. echo 正在修改DNS为:114.114.114.114和%DNSServerSearchOrder%
  50. netsh interface ipv4 set dns name="本地连接" source=static addr=%DNSServerSearchOrder%
  51. netsh interface ipv4 add dns name="本地连接" addr=114.114.114.114
  52. echo 修复完成。
  53. pause & exit
  54. :exitip
  55. exit
  56. pause
复制代码

作者: Linuxer    时间: 2014-10-8 22:13

xp下就不需要用ipv4了。
作者: Batcher    时间: 2014-10-8 22:33

可以考虑同时兼容中文系统和英文系统
作者: 小智BAT    时间: 2014-10-8 22:56

回复 2# Linuxer


    忘了改了。现在更新代码了。
作者: 小智BAT    时间: 2014-10-8 22:57

回复 3# Batcher


    该怎样改才兼容啊!??
作者: terse    时间: 2014-10-8 23:51

用WMIC 是否方便些呢?
作者: 小智BAT    时间: 2014-10-9 08:26

回复 6# terse


    可以给个参考吗?
作者: Batcher    时间: 2014-10-9 09:13

第八行delims=后面为什么是一个中文的冒号?
作者: Batcher    时间: 2014-10-9 09:17

如果以冒号作为列分隔符的话,获取到的ip、sm、wg变量里面会有多余的空格。
如果只是用来做显示的话当然没有问题,但删掉空格显得比较严谨。
作者: Batcher    时间: 2014-10-9 09:19

还有一点,你看是不是需要考虑多网卡的系统:
一个有线网卡,一个无线网卡。
安装了VMware之后产生的虚拟网卡。
...
作者: 小智BAT    时间: 2014-10-9 10:13

回复 9# Batcher


    那该如何去除空格问题,关于多网卡时,我暂不考虑,因为我只需改本地连接。
作者: Batcher    时间: 2014-10-9 10:59

回复 11# 小智BAT


    可以用set命令的字符串截取或者替换功能删掉空格
作者: Batcher    时间: 2014-10-9 11:01

我说的多网卡的情况是指,你的第8到10行可能会获取到错误的ip、sm、wg,最终导致后面的 netsh 命令给本地连接设置成错误的地址,于是就无法上网了。
作者: 小智BAT    时间: 2014-10-9 13:34

回复 13# Batcher


    可以举个栗子吗?
作者: Batcher    时间: 2014-10-9 16:51

回复 14# 小智BAT


以太网适配器 Local Area Connection:

   连接特定的 DNS 后缀 . . . . . . . : xxx
   本地链接 IPv6 地址. . . . . . . . : xxx
   IPv4 地址 . . . . . . . . . . . . : 10.10.1.2
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 10.10.1.1

以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : xxx
   IPv4 地址 . . . . . . . . . . . . : 192.168.222.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :
作者: 小智BAT    时间: 2014-10-9 17:30

回复 15# Batcher


    看看这个,是根据你帖子改写的。
  1. @echo off
  2. REM 设置网络适配器的名称
  3. REM 英文系统一般是:Local Area Connection
  4. REM set "AdapterName=Local Area Connection"
  5. REM 中文系统一般是:本地连接
  6. set "AdapterName=本地连接"
  7. set "FileTmp=%temp%\ipList.txt"
  8. ipconfig /all >"%FileTmp%"
  9. for /f "delims=:" %%i in ('findstr /n /c:"%AdapterName%" "%FileTmp%"') do (
  10.     set "SkipRow=%%i"
  11.     goto :DoSkip
  12. )
  13. :DoSkip
  14. for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "IP"') do (
  15.     set "IP=%%i"
  16.     goto :ShowResult
  17. )
  18. :ShowResult
  19. set "IP=%IP: =%"
  20. echo,%IP%
  21. for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "子网掩码"') do (
  22.     set "sm=%%i"
  23.     goto :Showsm
  24. )
  25. :Showsm
  26. set "sm=%sm: =%"
  27. echo,%sm%
  28. for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "默认网关"') do (
  29.     set "wg=%%i"
  30.     goto :Showwg
  31. )
  32. :Showwg
  33. set "wg=%wg: =%"
  34. echo,%wg%
  35. pause
复制代码

作者: 小智BAT    时间: 2014-10-9 19:52

回复 15# Batcher


    我已经更新代码了,你看看这样行不?
作者: Batcher    时间: 2014-10-9 19:54

回复 17# 小智BAT


    你自己多找一些不同的机器测试吧
作者: apang    时间: 2014-10-9 19:59

本帖最后由 apang 于 2014-10-9 20:00 编辑

wmic
  1. @echo off
  2. set "w1=wmic nic where "NetConnectionID='无线网络连接'" get Index"
  3. for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
  4. set "w2=wmic nicconfig where "Index='%n%'" get DefaultIPGateway^,IPAddress^,IPSubnet"
  5. for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
  6. echo,%IPAddress%
  7. echo,%IPSubnet%
  8. echo,%DefaultIPGateway%
  9. pause
复制代码

作者: apang    时间: 2014-10-9 20:04

本帖最后由 apang 于 2014-10-10 11:00 编辑

注册表:
xp下,reg query 的 /s 和 /v 开关好像不能一起使用,改一下:
  1. @echo off & setlocal enabledelayedexpansion
  2. set "v1=HKLM\SYSTEM\CurrentControlSet\Control\Network"
  3. set "v2=HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces"
  4. set "s=EnableDHCP IPAddress SubnetMask DefaultGateway"
  5. for /f "delims=" %%i in ('reg query "%v1%" /s') do (
  6.         set "v=%%i"
  7.         if /i "!v:~,4!" == "HKEY" (
  8.                 for %%a in ("!v!\..") do set "ID=%%~nxa"
  9.         ) else for /f "tokens=1,2*" %%a in ("!v!") do (
  10.                 if /i "%%a" == "Name" if "%%c" == "本地连接" goto :Next
  11.         )
  12. )
  13. :Next
  14. for /f "tokens=1,2*" %%i in ('reg query "%v2%\%ID%"^|findstr /i "%s%"')do (
  15.         set "v=%%k" & set "%%i=!v:\0=!"
  16. )
  17. if /i "%EnableDHCP%" == "0x1" (
  18.         echo,IP 地 址:%DHCPIPAddress%
  19.         echo,子网掩码:%DHCPSubnetMask%
  20.         echo,默认网关:%DHCPDefaultGateway%
  21. ) else (
  22.         echo,IP 地 址:%IPAddress%
  23.         echo,子网掩码:%SubnetMask%
  24.         echo,默认网关:%DefaultGateway%
  25. )
  26. pause
复制代码

作者: terse    时间: 2014-10-9 20:44

回复 7# 小智BAT

这个仅显示 没测试多网卡 设置的话 WMIC应该也可以哦
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=DefaultIPGateway^,IPAddress^,DNSServerSearchOrder^,IPSubnet^,DHCPEnabled"
  3. for /f "skip=1tokens=1*" %%i in ('wmic Nic where "Manufacturer<>'Microsoft' and NetConnectionStatus='2'" get Index^,NetConnectionID^') do (
  4.     for /f %%j in ("%%j") do (
  5.         echo 当前连接:%%j
  6.         for /f "tokens=1,2 delims={}," %%a in ('wmic Nicconfig where "Index='%%i'" get %str% /value') do (
  7.             for /f %%c in ("%%a%%~b") do set %%c
  8.         )
  9.     if /i "!DHCPEnabled!" == "TRUE" (
  10.        echo 当前获取IP模式:自动
  11.     ) else echo 当前获取IP模式:手动
  12.       echo 默认网关: !DefaultIPGateway!
  13.       echo ip地址: !IPAddress!
  14.       echo 主DNS: !DNSServerSearchOrder!
  15.       echo 子网掩码: !IPSubnet!
  16.     )
  17. )
  18. pause
复制代码
当然也可以获取 SettingID 后再在注册表里直接获取或修改
作者: 小智BAT    时间: 2014-10-9 20:54

回复 19# apang


    很好很强大,话说wmic改IP怎么修改的,能不能给个栗子??
作者: Batcher    时间: 2014-10-9 22:31

回复 22# 小智BAT
  1. wmic nicconfig where(index='8') call enablestatic "192.168.1.81","255.255.255.0"
复制代码
http://bbs.bathome.net/thread-4068-1-1.html




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