标题: [网络连接] 批处理怎样自动修改IP和DNS? [打印本页]
作者: jkyyjyn001 时间: 2011-4-16 23:26 标题: 批处理怎样自动修改IP和DNS?
- ::问题一:提取"默认网关"和DNS1 DNS2 时有的系统版本 DNS2 提取不正常,得到的是dns2=Primary.WINS.Server . . . . . . . : 192.168.74.2 (正常的是:DNS2=192.168.74.2) 请问能否解决???
- ::问题二:本批处理当次可以正常设置,第二次运行批处理后会变为IP和DNS都是自动获取的(好像秕处理不起作用一样),第三次又正常,第四次不正常.....一直循环.....请问是什么原因???如何解决???先谢谢各位大侠。。。。
- @echo off
- ::提取"本地连接"名称
- for /f "tokens=3,4 delims==: " %%i in ('ipconfig ^|findstr /r "本"') do set b=%%i %%j
- echo %b% > bd.txt
- for /f %%a in (bd.txt) do set bd=%%a
- set bdl="%bd%"
- del bd.txt
-
- ::将IP和DNS改为自动获取
- netsh interface ip set address name=%bdl% source=dhcp >nul
- netsh interface ip set dns name=%bdl% source=dhcp >nul
-
- ::提取"默认网关"和DNS1 DNS2
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&set d&goto ip
- if /i "%%a %%b"=="DNS Servers" (set "dns1=%%c")else set "dhcp=%%c")
- :ip
-
- ::为使用在同一网段
- echo %dhcp% > dhcp.txt
- for /f "delims=. tokens=1,2,3" %%a in (dhcp.txt) do set dip=%%a.%%b.%%c
- del dhcp.txt
-
- ::防止IP冲突而自动设置IP
- for /l %%i in (2,1,255) do (ping -n 1 %dip%.%%i |find "Reply" >nul 2>nul && echo %dip%.%%i
- 已被使用 || set ip=%dip%.%%i && goto pip )
-
- 设置IP及DNS1 DNS2
- :pip
- set MASK="255.255.255.0"
- set GM=1
- netsh interface ip set address name=%bdl% source=static addr=%IP% mask=%MASK% gateway=%
- dhcp% gwmetric=%GM%
- netsh interface ip set dns name=%bdl% source=static addr=%dns1%
- netsh interface ip set wins name=%bdl% source=static addr=%dns2%
复制代码
作者: Batcher 时间: 2011-4-17 11:46
1# jkyyjyn001
获取DNS的时候,用冒号作为分隔符能否解决问题?
作者: jkyyjyn001 时间: 2011-4-17 12:27
2# Batcher
先谢谢BATCHER大哥的关注。。。。
在获取IP和DNS时本来就是 ":. "就是冒号+点+空格。。
可是有的版本系统IPCONFIG/ALL出来的是:
DNS Server.............:192.168.74.2
Primary WINS Server....:192.168.74.2
有的IPCONFIG/ALL出来的是:
DNS Server.............:192.168.74.2
192.168.74.2(前面少了Primary WINS Server....:)
所以不好弄这个问题。。。不过DNS没有备用的也可以用
我现在最纠结的是。。。本批处理当次可以正常设置,第二次运行批处理后会变为IP和DNS都是自动获取的(好像秕处理不起作用一样,第三步::将IP和DNS改为自动获取后面的命令没执行或者执行出错?),第三次又正常,第四次不正常.....一直循环.....望大哥解惑!!!
作者: Batcher 时间: 2011-4-17 13:47
3# jkyyjyn001
把@echo off删掉,看看第二次执行的时候哪里出错了。
作者: jkyyjyn001 时间: 2011-4-18 00:00
本帖最后由 jkyyjyn001 于 2011-4-18 00:05 编辑
4# Batcher
再次多谢Batcher 大哥的关注。。。
我用笨办法解决了DNS2的获取问题。。。可第二个问题还是弄不明白。。。我截了个图,和小批发上来让大家指点。。。(图是小批运行出错时截的。前面那部分我看不到,所以也没办法查是哪里出问题了。。。)
[attach]3729[/attach]
@echo off
for /f "tokens=3,4 delims==: " %%i in ('ipconfig ^|findstr /r "本"') do set b=%%i %%j
echo %b% > bd.txt
for /f %%a in (bd.txt) do set bd=%%a
set bdl="%bd%"
del bd.txt
netsh interface ip set address name=%bdl% source=dhcp >nul
netsh interface ip set dns name=%bdl% source=dhcp >nul
[attach]3729[/attach]
for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
if defined dns1 set dns3=%%a.%%b.%%c&set d&goto ip
if /i "%%a %%b"=="DNS Servers" (set "dns1=%%c")else set "dhcp=%%c")
:ip
echo %dns3%>dns3.txt
type dns3.txt | find "WINS" && goto jk2 || set dns2=%dns3% && goto jk
:jk2
for /f "delims=: tokens=1,2" %%i in (dns3.txt) do set dns2=%%j
:jk
del dns3.txt
echo %dhcp% > dhcp.txt
for /f "delims=. tokens=1,2,3" %%a in (dhcp.txt) do set dip=%%a.%%b.%%c
set A=1
:ipl
SET /A A+=1
ping -n 1 %dip%.%A% | find "Reply" && echo "%dip%.%A%"已被使用 && goto ipl || set ip=%
dip%.%A%
set MASK="255.255.255.0"
set GM=1
netsh interface ip set address name=%bdl% source=static addr=%IP% mask=%MASK% gateway=%dhcp%
gwmetric=%GM%
Netsh interface IP set dns "%bdl%" source=static %dns1% register=primary
Netsh interface IP add dns "%bdl%" %dns2%
pause
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |