Windows下通過bat擷取網路連線實際名稱,加強IP類設定指令碼的相容性_DOS/BAT

來源:互聯網
上載者:User

其中比較難解決的問題就是擷取網路連線的實際名稱,大部分人使用的IP設定指令碼都是將【本地串連】寫死在代碼中,可實際上並不是所有電腦都叫本地串連;比如有的使用者電腦可能升級了網卡驅動,或者更換了網卡,導致網路連線的名稱變成“本地串連2”,又比如有無聊好事者(某產線的作業員電腦),將網路連線的名稱各種DIY,我就見過一個修改成"操蛋的青春",瞬間無語!

好了,廢話不多說,直接上菜!


對於網路連線的實際名稱,可能出現的情況有:
1.網卡更換/驅動升級導致名稱變更,比如本地串連2
2.系統語系不同導致網路連線名稱也不同,比如簡體叫【本地連線】,而繁體卻叫【區域連線】
3.系統版本不同,導致命令列顯示也不同,比如ipconfig/all,簡體XP中顯示為【Ethernet adapter 本地串連:】,而簡體WIN7顯示卻是【乙太網路適配器 本地串連:】
4.其他不可預料的問題

   

那如果要編寫一個通用的IP修改指令碼,必須就得考慮到以上1-3條的問題,才能提高相容性,接近版本/簡繁語系通吃!(英文版暫未考慮)
(PS:以下代碼只為說明擷取名稱,其他一切從簡展示):

一、先給出一個XP下簡繁體通用的擷取連線名稱的代碼

@echo off  for /f "tokens=1,2,3 delims=: " %%i in ('ipconfig/all ^|find /i "Ethernet adapter"') do set netname=%%k netsh interface ip set address name="%netname%" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1  pause

簡單說明:此代碼通過ipconfig/all擷取連線資訊,然後抓取Ethernet adapter之後的名稱,即%%k為實際連線名稱,理論上簡繁體通用。

代碼缺點:
1.不相容WIN7,win7使用ipconfig/all後,得到的是【乙太網路卡 區域連線:】
2.本地超過一塊網卡的時候應該會出錯(具體未實測)
適用場合:在保證單網卡和XP環境下可用不區分簡繁體使用。

二、來個XP/WIN7/簡繁體通吃的連線名稱擷取代碼(最近才幫維護人員寫的,熱乎著呢!):

rem 以上內容略  for /f tokens^=1^,2^ delims^=^" %%j in ('netsh interface ip show config') do (        if "%%j"=="介面 " (     netsh interface ip set address name="%%k" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1     )     if "%%j"=="介面 " (     netsh interface ip set address name="%%k" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1     )  )

簡單說明:通過netsh擷取資訊,能相容XP和WIN7;然後通過【介面】還是【介面】的區分,又能相容簡繁體,所以是通吃代碼!

代碼缺點:暫未實現多網卡的區分功能,所以雙/多網卡電腦執行此指令碼,所有網卡均設定成一樣的資訊,這很蛋疼!
適用範圍:只要不存在多網卡,均能使用!多網卡慎用哦~!

三、最後,再給個XP環境下加入了多網卡判斷的擷取連線名稱的指令碼吧!
Ps:或許有筒子可以參考做出全相容的指令碼呢!(俺時間太緊,就不折騰啦)

rem 請使用call :getnetnme調用此模組,然後從臨時檔案"%~dp0dns.tmp"中擷取連線名稱!  :getnetname  setlocal enabledelayedexpansion  set "NIC_flag=Ethernet"  set NIC_num=0  for /f "tokens=1,2,3,* delims=: " %%i in ('ipconfig /all') do (    set /a num+=1    if "%%i"=="%NIC_flag%" (      set /a num_=!num!+3,NIC_num+=1      set NIC_name!Nic_num!=%%k)    if !num! EQU !num_! set var=%%l   set var=!var:*:=!    set Desp!Nic_num!=!var!  )  if %NIC_num% gtr 1 ( echo 發現多塊網卡,請手動設定...       pause>nul       goto TCPset       )  for /l %%i in (1 1 %NIC_num%) do echo !NIC_name%%i!>"%~dp0dns.tmp" goto :eof 

簡單說明:在代碼一的基礎上加上了網卡數量的判斷,超過一塊就提示手動設定,避免因多塊網卡設定IP出現問題。

代碼缺點:

1.還是未能解決多塊網卡自動化佈建IP的情況,請有興趣的筒子參考改進哦!
2.無法相容WIN7

好了,以上就是擷取實際網路連線名稱的所有代碼了,希望能幫到有需要的朋友!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.