标题: [网络连接] 【已解决】获取IP地址信息再更改IP地址批处理。 [打印本页]
作者: 小智BAT 时间: 2014-10-8 15:54 标题: 【已解决】获取IP地址信息再更改IP地址批处理。
本帖最后由 小智BAT 于 2014-10-14 06:47 编辑
大家帮忙测试下,如有建议都提出来。
代码已经更新这个看,看看有还有什么问题??- @echo off
- title IP自动改手动批处理。
- color 0a
- ver | find "5.1." > NUL && goto show51
- ver | find "6.1." > NUL && goto show61
- :show51
- @echo 当前系统是:[WindowsXP ]
-
- echo ------------------------
- echo 正在获取本地连接地址信息:
- set "w1=wmic nic where "NetConnectionID='本地连接'" get Index"
- for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
- set "w2=wmic nicconfig where "Index='%n%'" get DNSServerSearchOrder^,DefaultIPGateway^,IPAddress^,IPSubnet"
- for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
- echo ============================
- echo,IP地址:%IPAddress%
- echo,子网:%IPSubnet%
- echo,网关:%DefaultIPGateway%
- echo,DNS:%DNSServerSearchOrder%
- echo 正在修改为手动IP地址
- netsh interface ip set address name="本地连接" source=static addr=%IPAddress% mask=%IPSubnet%
- netsh interface ip set address name="本地连接" gateway=%DefaultIPGateway% gwmetric=0
- echo 正在修改DNS为:%DNSServerSearchOrder%和114.114.114.114
- netsh interface ip set dns name="本地连接" source=static addr=%dns%
- netsh interface ip add dns name="本地连接" addr=114.114.114.114
- pause & exit
- :show61
- @echo 当前系统是:[Windows7 ]
- echo ------------------------
- echo 正在获取本地连接地址信息:
- set "w1=wmic nic where "NetConnectionID='本地连接'" get Index"
- for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
- set "w2=wmic nicconfig where "Index='%n%'" get DNSServerSearchOrder^,DefaultIPGateway^,IPAddress^,IPSubnet"
- for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
- echo ============================
- echo,IP地址:%IPAddress%
- echo,子网:%IPSubnet%
- echo,网关:%DefaultIPGateway%
- echo,DNS:%DNSServerSearchOrder%
- echo ============================
- goto workdo
- :workdo
- set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
- set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."
- 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 本地连
-
- 接网络没连接或者网线没拆好。&goto exitip
- :workip
- echo 正在修改为手动IP地址:%IPAddress% %IPSubnet% %DefaultIPGateway% %DNSServerSearchOrder%
- netsh interface ip set address name="本地连接" source=static addr=%IPAddress% mask=%IPSubnet% gateway=%DefaultIPGateway% gwmetric=1
- echo 正在修改DNS为:114.114.114.114和%DNSServerSearchOrder%
- netsh interface ipv4 set dns name="本地连接" source=static addr=%DNSServerSearchOrder%
- netsh interface ipv4 add dns name="本地连接" addr=114.114.114.114
- echo 修复完成。
- pause & exit
-
- :exitip
- exit
- 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
看看这个,是根据你帖子改写的。- @echo off
- REM 设置网络适配器的名称
- REM 英文系统一般是:Local Area Connection
- REM set "AdapterName=Local Area Connection"
- REM 中文系统一般是:本地连接
- set "AdapterName=本地连接"
-
- set "FileTmp=%temp%\ipList.txt"
- ipconfig /all >"%FileTmp%"
- for /f "delims=:" %%i in ('findstr /n /c:"%AdapterName%" "%FileTmp%"') do (
- set "SkipRow=%%i"
- goto :DoSkip
- )
-
- :DoSkip
- for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "IP"') do (
- set "IP=%%i"
- goto :ShowResult
- )
-
- :ShowResult
- set "IP=%IP: =%"
- echo,%IP%
- for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "子网掩码"') do (
- set "sm=%%i"
- goto :Showsm
- )
-
- :Showsm
- set "sm=%sm: =%"
- echo,%sm%
- for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "默认网关"') do (
- set "wg=%%i"
- goto :Showwg
- )
-
- :Showwg
- set "wg=%wg: =%"
- echo,%wg%
- 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- @echo off
- set "w1=wmic nic where "NetConnectionID='无线网络连接'" get Index"
- for /f %%a in ('%w1% ^| findstr /b [0-9]') do set "n=%%a"
- set "w2=wmic nicconfig where "Index='%n%'" get DefaultIPGateway^,IPAddress^,IPSubnet"
- for /f tokens^=1-2delims^={^" %%a in ('%w2% /value^|find "."')do set "%%a%%b"
- echo,%IPAddress%
- echo,%IPSubnet%
- echo,%DefaultIPGateway%
- pause
复制代码
作者: apang 时间: 2014-10-9 20:04
本帖最后由 apang 于 2014-10-10 11:00 编辑
注册表:
xp下,reg query 的 /s 和 /v 开关好像不能一起使用,改一下:- @echo off & setlocal enabledelayedexpansion
- set "v1=HKLM\SYSTEM\CurrentControlSet\Control\Network"
- set "v2=HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces"
- set "s=EnableDHCP IPAddress SubnetMask DefaultGateway"
-
- for /f "delims=" %%i in ('reg query "%v1%" /s') do (
- set "v=%%i"
- if /i "!v:~,4!" == "HKEY" (
- for %%a in ("!v!\..") do set "ID=%%~nxa"
- ) else for /f "tokens=1,2*" %%a in ("!v!") do (
- if /i "%%a" == "Name" if "%%c" == "本地连接" goto :Next
- )
- )
-
- :Next
- for /f "tokens=1,2*" %%i in ('reg query "%v2%\%ID%"^|findstr /i "%s%"')do (
- set "v=%%k" & set "%%i=!v:\0=!"
- )
-
- if /i "%EnableDHCP%" == "0x1" (
- echo,IP 地 址:%DHCPIPAddress%
- echo,子网掩码:%DHCPSubnetMask%
- echo,默认网关:%DHCPDefaultGateway%
- ) else (
- echo,IP 地 址:%IPAddress%
- echo,子网掩码:%SubnetMask%
- echo,默认网关:%DefaultGateway%
- )
- pause
复制代码
作者: terse 时间: 2014-10-9 20:44
回复 7# 小智BAT
这个仅显示 没测试多网卡 设置的话 WMIC应该也可以哦- @echo off&setlocal enabledelayedexpansion
- set "str=DefaultIPGateway^,IPAddress^,DNSServerSearchOrder^,IPSubnet^,DHCPEnabled"
- for /f "skip=1tokens=1*" %%i in ('wmic Nic where "Manufacturer<>'Microsoft' and NetConnectionStatus='2'" get Index^,NetConnectionID^') do (
- for /f %%j in ("%%j") do (
- echo 当前连接:%%j
- for /f "tokens=1,2 delims={}," %%a in ('wmic Nicconfig where "Index='%%i'" get %str% /value') do (
- for /f %%c in ("%%a%%~b") do set %%c
- )
- if /i "!DHCPEnabled!" == "TRUE" (
- echo 当前获取IP模式:自动
- ) else echo 当前获取IP模式:手动
- echo 默认网关: !DefaultIPGateway!
- echo ip地址: !IPAddress!
- echo 主DNS: !DNSServerSearchOrder!
- echo 子网掩码: !IPSubnet!
- )
- )
- pause
复制代码
当然也可以获取 SettingID 后再在注册表里直接获取或修改
作者: 小智BAT 时间: 2014-10-9 20:54
回复 19# apang
很好很强大,话说wmic改IP怎么修改的,能不能给个栗子??
作者: Batcher 时间: 2014-10-9 22:31
回复 22# 小智BAT - 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://www.bathome.net/) |
Powered by Discuz! 7.2 |