Board logo

标题: [系统相关] (不完美解决办法)win7下批处理添加/修改所有物理网卡(排除虚拟网卡)的dns [打印本页]

作者: wd4455    时间: 2016-7-5 11:19     标题: (不完美解决办法)win7下批处理添加/修改所有物理网卡(排除虚拟网卡)的dns

本帖最后由 wd4455 于 2016-7-11 10:46 编辑

不完美解决办法http://www.bathome.net/redirect. ... 0952&pid=187566


本希望用注册表导入的办法搞定,因为需要注入不少的键值,但是弄了很久发觉{xxx}键值是不固定的不能用注册表导入的办法一次性解决问题,之后就在研究用bat的办法搞定dns的写入,在晚上百度了很久了一些脚本.研究了很久内能实现脚本.有恳请大虾修改或写一个获取所有物理网卡并自动修改所有网卡的dns的脚本么?

1.这个脚本说是能获取活动网卡的名称,win7上获取的名称完全不正确,请大虾看看哪里错了
  1. @echo off
  2. ::判断本地连接 赋值a
  3. for /f "tokens=3,4 delims== " %%i in ('ipconfig ^|findstr /r "本"') do echo %%i %%j >DNS.txt
  4. for /f "tokens=1 delims==:" %%d in (DNS.txt) do set a=%%d
  5. ::TYPE "%~sdp0"/DNS.txt
  6. ::pause
  7. netsh interface ip set dns name="%a%" source=static addr=202.98.96.68
  8. netsh interface ip add dns "%a%" 61.139.2.69 index=2
  9. pause
复制代码
2.直接设置连接名称要等很久...
  1. netsh interface ip set dns name="本地连接" source=static addr=202.96.199.132
  2. netsh interface ip add dns "本地连接" 202.96.64.38 index=2
  3. netsh interface ip set dns name="本地连接 2" source=static addr=202.96.199.132
  4. netsh interface ip add dns "本地连接 2" 202.96.64.38 index=2
  5. ::等等.....
复制代码
3.这个脚本完全没有获取网卡名称
  1. FOR /F "tokens=2*" %%i IN ('ipconfig/all^|find /i "Ethernet adapter "') DO set name=%%j
  2. FOR /F "tokens=1* delims=:" %%i in ("%name%") do set 网卡名称=%%i
  3. netsh -c interface ip add dns name="%网卡名称%" addr=202.96.199.132 index=1
  4. netsh -c interface ip add dns name="%网卡名称%" addr=202.96.64.38 index=2
复制代码
4.从本站<支持多网卡,多模式,多系统的IP切换的批处理>提取的脚本...网卡名字倒是能获取到,但是研究了很久就是不会用(名称中会有虚拟网卡),之后的选择界面按数字没反应.后面的修改网卡的代码完全看不懂
  1. echo 本机网卡:
  2. for /f "tokens=1*" %%g in ('ipconfig^|find /i "适配器"') do set/a bbb+=1&set zccc_!bbb!=%%h
  3. for /l %%q in (1,1,!bbb!) do set zccz=!zccc_%%q!&echo %%q.!zccz:~0,-1!
复制代码
http://www.bathome.net/viewthread.php?tid=8094
5.从本站《取名称、多连接、虚拟、多环境、路由》的代码太复杂了,完全读不懂。
http://www.bathome.net/thread-34421-1-1.html
求大神修正下代码.
作者: flyinnet9    时间: 2016-7-5 15:55

本帖最后由 flyinnet9 于 2016-7-5 15:56 编辑

找活动物理网卡
wmic nic get netconnectionid,netconnectionstatus,physicaladapter

netconnectionstatus=2是活动的
作者: pcl_test    时间: 2016-7-5 16:18

  1. wmic nic where "PNPDeviceID like 'pci\\%%'" get Caption,NetConnectionID,Index,Name /value
复制代码
配合netsh interface或wmic nicconfig即可
作者: wd4455    时间: 2016-7-6 10:05

2位大神。。取名后怎么将获得的名字带入
netsh -c interface ip add dns name="%网卡名称%" addr=202.96.199.132 index=1

这个函数的结果不会利用setlocal enabledelayedexpansion,本网的几个样本边百度边学没看懂。。。只是弄明白了
  1. echo 本机网卡:
  2. for /f "tokens=1*" %%g in ('ipconfig^|find /i "适配器"') do set/a bbb+=1&set zccc_!bbb!=%%h
  3. for /l %%q in (1,1,!bbb!) do set zccz=!zccc_%%q!&echo %%q.!zccz:~0,-1
复制代码
是怎么回事
怎么利用%%q.!zccz:~0,-1。。后面的代码完全读不懂,有类似的帖子么?搜了很久没看到
作者: wd4455    时间: 2016-7-6 10:15

本帖最后由 wd4455 于 2016-7-6 10:34 编辑

回复 3# pcl_test
脚本的结果好像不包含无线网卡对么?
另 取名称、多连接、虚拟、多环境、路由.bat和支持多网卡,多模式,多系统的IP切换的批处理 .bat的那一段是将用了后的setlocal enabledelayedexpansion变量带入的?
http://www.jb51.net/article/29323.htm中没有看到实例。。
比如1.XXX
      2.XXXX
      3.XXX
怎么过将这些变量带入netsh -c interface ip add dns name="%网卡名称%" addr=202.96.199.132 index=1 ?
  1. echo 本机网卡:
  2. for /f "tokens=1*" %%g in ('ipconfig^|find /i "适配器"') do set/a bbb+=1&set zccc_!bbb!=%%h
  3. for /l %%q in (1,1,!bbb!) do set zccz=!zccc_%%q!&echo %%q.!zccz:~0,-1!
复制代码
的代码中怎么修改都需要加入序号。。 set/a bbb+=1,
怎么直接利用setlocal enabledelayedexpansion后直接将获得的变量带入修改?
没有接触过编程,描述的有点混乱不好意思。
目的只有一个利用setlocal enabledelayedexpansion通过for /f "tokens=将wmic nic get netconnectionid获得的结果直接带入netsh -c interface ip add dns name="%网卡名称%" addr=202.96.199.132 index=1
作者: flyinnet9    时间: 2016-7-6 10:32

  1. for /f "delims=" %%a in ('wmic nic where ^"netconnectionstatus^=2 AND physicaladapter^=TRUE^" get netconnectionid/value^|find "="') do set %%a
  2. netsh interface ip set dns name="%netconnectionid%" source=static addr=202.98.96.68
复制代码

作者: wd4455    时间: 2016-7-6 10:41

本帖最后由 wd4455 于 2016-7-6 10:43 编辑

回复 6# flyinnet9

啊。。谢谢啊~
这个是自动获取所有物理网卡自动带入的完整代码?
能附加一点解释么?
作者: wd4455    时间: 2016-7-6 10:45

本帖最后由 wd4455 于 2016-7-6 11:39 编辑

活动网卡获取并修改的完整代码。。非常感谢~,我需要的修改所有物理网卡的。。'wmic nic where ^"netconnectionstatus^=2这里修改了好久都不能用wmic nic get netconnectionid代替。。。
应该怎么将get netconnectionid带入
使用setlocal enabledelayedexpansion
for /f "delims=" %%a in ('wmic nic where 将^"get netconnectionid带入 AND physicaladapter^=TRUE^" get netconnectionid/value^|find "="') do set %%a
并将获得的变量直接带入netsh interface ip set dns name="%netconnectionid%" ?
%netconnectionid%这个变量赋值是蓝色的那一句么?
AND physicaladapter^=TRUE^这句显示查询结果为TRUE的是怎么写的?试验了半天没不是查询无效就是表达式无效
使用setlocal enabledelayedexpansion怎么提取变量前面的变量?。。直接使用变量每次结果都是最后一个。
作者: pcl_test    时间: 2016-7-6 11:52

本帖最后由 pcl_test 于 2016-7-6 12:49 编辑

方法一
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims==" %%a in ('wmic nic where "PNPDeviceID like 'pci\\%%' or PNPDeviceID like 'usb\\%%'" get NetConnectionID /value^|find "="') do set /a n+=1&set "#!n!=%%b"
  3. set #
  4. for /l %%a in (1 1 %n%) do echo;!#%%a!
  5. pause
复制代码

作者: wd4455    时间: 2016-7-6 12:03

本帖最后由 pcl_test 于 2016-7-6 12:14 编辑

回复 9# pcl_test
始终只有本地连接,看不到无线网卡。。不是要用netconnectionid才行?
只能看到在用网卡,网卡禁用后不能显示删除^"netconnectionstatus^=2 AND 后脚本出错。。
  1. for /f "delims=" %%a in ('wmic nic where  physicaladapter^=TRUE^ get netconnectionid/value^|find "="') do set %%a
复制代码

作者: pcl_test    时间: 2016-7-6 12:20

回复 10# wd4455
  1. wmic nic get PNPDeviceID,NetConnectionID /value|find "=">D:\结果.txt
复制代码
把结果.txt里的内容发出来看看
作者: wd4455    时间: 2016-7-6 12:29

2 张有线网卡,其中一张禁用 2张无线网卡一个禁用

1、-------------------------------------------------------------------
wmic nic >1.txt
USB Wireless LAN Card           无线网络连接     7                    FALSE   
PCIe GBE Family Controller #2   本地连接 2       2                    TRUE  
Realtek PCIe GBE Family Controller      本地连接         4                    FALSE
802.11n USB Wireless LAN Card           WLAN             0                    FALSE
作者: pcl_test    时间: 2016-7-6 12:49

这就不奇怪了,你的无线网卡是外置的。
9L已改
作者: wd4455    时间: 2016-7-6 12:56

本帖最后由 wd4455 于 2016-7-6 12:59 编辑

请问。获取的脚本变量直接可以带入命令么?我怎么试验了半天每次提取的变量都是最后一个?
do set /a n+=1&set "#!n!=%%b" 这里的变量我怎么带入进去?
作者: pcl_test    时间: 2016-7-6 13:01

回复 14# wd4455

可以
#数字 这些就是变量
fou /l 这句不是把 #数字 这些变量的值读出来了么
作者: wd4455    时间: 2016-7-6 13:03

本帖最后由 wd4455 于 2016-7-6 13:10 编辑

不好意思,没学过。只能百度找实例慢慢研究
看错楼了。。改的9楼。。我看的10楼。。研究了半天
tokens=

作者: wd4455    时间: 2016-7-6 14:24

还在努力啃脚本中。。。群组赋值是叫数组么?
作者: wd4455    时间: 2016-7-8 09:47

本帖最后由 wd4455 于 2016-7-8 09:53 编辑

回复 15# pcl_test


    不好意思大神。。。研究了2天貌似不能用bat实现类似数组的功能。。取值取不到前面的值。。。实在不好意思
不能自动将获取的#1-#N自动带入。。每次获取赋值后自动运行一次修改nds?
貌似需要用循环语句来实现?
作者: pcl_test    时间: 2016-7-8 12:02

回复 18# wd4455

对照9L
  1. @echo off
  2. set #1=举
  3. set #2=个
  4. set #3=栗
  5. set #4=子
  6. set #
  7. echo;%#1%-%#2%-%#3%-%#4%
  8. for /l %%a in (1 1 5) do set _%%a=%%a
  9. set _
  10. echo;%_1% %_3% %_5%
  11. pause
复制代码

作者: wd4455    时间: 2016-7-8 12:37

感谢。。。犹如明灯一般。。。我继续研究。。。
作者: wd4455    时间: 2016-7-11 10:08

本帖最后由 wd4455 于 2016-7-11 10:43 编辑

回复 19# pcl_test


    不好意思了大神,小弟愚钝,研究了很久变量的连续赋值没弄明白最后使用了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims==" %%a in ('wmic nic where "PNPDeviceID like 'pci\\%%' or PNPDeviceID like 'usb\\%%'" get NetConnectionID /value^|find "="') do set /a n+=1&set "#!n!=%%b"
  3. if defined #1 (goto:#1) else (goto:结束)
  4. :#1
  5. netsh interface ip set dns name="%#1%" source=static addr=202.96.199.132
  6. netsh interface ip add dns "%#1%" 202.96.64.38 index=2
  7. if defined #2 (goto:#2) else (goto:结束)
  8. :#2
  9. netsh interface ip set dns name="%#2%" source=static addr=202.96.199.132
  10. netsh interface ip add dns "%#2%" 202.96.64.38 index=2
  11. if defined #3 (goto:#3) else (goto:结束)
  12. :#3
  13. netsh interface ip set dns name="%#3%" source=static addr=202.96.199.132
  14. netsh interface ip add dns "%#3%" 202.96.64.38 index=2
  15. if defined #4 (goto:#4) else (goto:结束)
  16. :#4
  17. netsh interface ip set dns name="%#4%" source=static addr=202.96.199.132
  18. netsh interface ip add dns "%#4%" 202.96.64.38 index=2
  19. if defined #5 (goto:#5) else (goto:结束)
  20. :#5
  21. netsh interface ip set dns name="%#5%" source=static addr=202.96.199.132
  22. netsh interface ip add dns "%#5%" 202.96.64.38 index=2
  23. :结束
  24. exit
复制代码
的办法绕开赋值。。。 不好意思有被教导了
作者: wd4455    时间: 2016-7-11 11:12

回复 19# pcl_test


::netsh interface ip set dns name="%#1%" source=static addr=91.12.80.100
netsh interface ip add dns "%#1%" 155.12.64.1 index=2
都会显示:
     配置的dns服务器不正确或者不存在
是怎么回事?dns是修改了的。




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