
[分享]批處理檢測本地連接并自動連接寬帶這個小工具主要用于一些寬帶用戶本地連接不穩定, 或者寬帶老愛掉線的狀況.功能: 設置并保存寬帶帳號密碼, 從而實現斷線自動檢測并嘗試重新連接. 特色: 由于本工具獨立保存寬帶帳號密碼在一個文件里, 本工具獲得正確的帳號密碼后,系統里只要寬帶連接沒有被刪除, 改名, 帳號密碼錯誤都不會影響本工具正常功能.在第一次運行時需要填入帳號密碼信息, 以后工具會自動讀取保存好的信息進行工作.第一次填好帳號和密碼后, 可以關掉工具再重新打開, 想讓工具隱藏界面運行直接回車就行了.可對如下各種情況進行檢測并作出相應處理:寬帶連接是否已建立或被刪除, 帳號密碼是否正確;本地連接是否存在, 停用, 是否已連接.本地連接成功后, 寬帶是否連接上.主要原理是分析 ipconfig 的輸出來判斷網絡狀態并實現自動連接寬帶當且僅第一次運行此腳本時, 腳本檢測如果不存在 %windir%PPPCFG.ini 文件, 將提示用戶輸入寬帶連接的連接名, 用戶名, 密碼,(必須是和網絡連接文件夾中的某一個寬帶連接匹配) 然后將這些信息保存在 %windir%PPPCFG.ini 文件中, 作為以后自動調用連接的依據. 只要 %windir%PPPCFG.ini 這個文件還在, 以后運行就不用再輸入什么信息了.如果寬帶配置比如 用戶名和密碼變了, 那么, 也只用運行一行命令:
刪除失效的配置文件, 再重新輸入一次就可以了.1. 當有線網卡未裝驅動或停用時, ipconfig 的輸出中無本地連接的信息, 界面顯示青蘭色, ?本地連接(網卡物理地址)不存在或停用2. 當有線網卡工作正常但未成功連接時(比如拔了網線), ipconfig 輸出中顯示本地連接狀態為 Media disconnected, 以此判斷本地連接斷開, 界面顯示紅色, ╳本地連接(網卡物理地址)被斷開3. 當有線網卡工作正常且本地連接成功時, 但寬帶連接未連接上時, ipconfig 的輸出中無 PPP adapter 段, 以此判斷寬帶連接斷開, 界面顯示藍色, 但提示信息只是指示:╩本地連接(網卡物理地址)已連接上 此時, 如果已經存在保存了正確配置信息的 %windir%PPPCFG.ini 文件, 將調用運行該文件自動連接寬帶.4. 當寬帶成功連接, 連接過程的輸出結果中將有 已連接 字樣, 并且 ipconfig 的輸出中也會出現 PPP adapter 段, 如此判斷寬帶連接成功以及是否保持, 如果再次斷開, 就再次進入 3 的狀態并且再次自動嘗試恢復寬帶連接. 寬帶保持連接時, 界面顯示綠色, ╬═╬本地連接和寬帶連接(網卡物理地址)已連接上下面是四種不同的狀態界面合成一個圖貼在這了:[attach]2090[/attach]另外 getmac 的輸出也是可以指示網卡的停用, 斷開的狀態的, 有興趣者可以加入對它的輸出的分析, 讓狀態判斷更準確到位.nclick="copycode($('code0'));">復制代碼
- del %windir%PPPCFG.ini
[ 最后由 neorobin 于 2009-12-10 20:11]nclick="copycode($('code1'));">復制代碼
- @echo off&setlocal enabledelayedexpansion&(set PPPCFG=%windir%PPPCFG.ini)
- if not exist !PPPCFG! goto begin
- if /i %1 equ hide goto begin
- if /i %1 equ show goto begin
- if /i %1 equ setAccount (call :setAccount %1) && goto begin
- mode con lines=4 cols=58&(set /p show=需要顯示小窗口界面嗎^(y/n^)[直接回車=不顯示]:)
- if /i %show:~0,1% equ y goto begin
- rem mshta vbscript:createobject(wscript.shell).run(%~nx0 hide,0)(window.close)&&exit
- (call :showWindow hide)
- :begin
- chcp 936 & cls & rem 后面的的判斷全以中文代碼頁936輸出為準
- (set sLC=本地連接)&(set sPPP=寬帶連接)&(set fn=%windir%~netmp)
- if not exist !PPPCFG! (call :setAccount %1)
- cls & mode con lines=2 cols=58
- :loop
- (ipconfig/all>!fn!)
- (set foundLC=false)&(set foundLCPA=false)&(set LCC=true)&(set LCPA=)&(set PPP_WAN=false)
- for /f delims= %%i in (!fn!) do (
- (set ln=%%i) & rem echo !ln!
- (set ln=!ln: =!) & (set ln=!ln:*本地連接:=本地連接:!)
- if !ln:~0,5! equ !sLC!: (
- (set foundLCPA=false)&(set foundLC=true)
- )
- if /i !ln:~0,10! equ MediaState (
- (set ln=!ln:*disconnected=disconnected!)
- if /i !ln:~0,12! equ disconnected (
- if /i !foundLC! equ true if /i !foundLCPA! equ false (set LCC=false)
- )
- )
- if /i !ln:~0,15! equ PhysicalAddress (
- if /i !foundLC! equ true if !LCPA! equ (
- (set foundLCPA=true)&(set ln=!ln:*:=!)&(set LCPA=!ln:~0,17!)
- )
- )
- if /i !ln:~0,3! equ PPP (set PPP_WAN=true)
- (set ln=!ln:*:=!)
- if /i !ln:~0,3! equ WAN (set PPP_WAN=true)
- )
- if /i !foundLC! equ false (set LCC=false)
- cls
- if !LCC! neq !LCC0! (set LCC0=!LCC!)&if /i !LCC! equ false (set /p=<nul) else (set /p=<nul)
- if !PPP_WAN! neq !PPP_WAN0! (set PPP_WAN0=!PPP_WAN!)&if /i !PPP_WAN! equ false (set /p=<nul) else (set /p= <nul)
- if /i !PPP_WAN! equ true (set sgn=╬═╬!sLC!和!sPPP!) else (set sgn=╩!sLC!)
- if /i !LCC! equ false (
- (color cf)&(title ╳!sLC!^(!LCPA!^)被斷開) & echo ╳!sLC!^(!LCPA!^)被斷開
- if /i !foundLC! equ false (color 3f)&(title ?!sLC!^(!LCPA!^)不存在或停用) & echo ?!sLC!^(!LCPA!^)不存在或停用
- (set PPP_WAN=false)
- ) else (
- (title !sgn!^(!LCPA!^)已連接上) & (set /p=!sgn!^(!LCPA!^)已連接上<nul)
- if /i !PPP_WAN! equ true (color 2f) else (color 9f)
- if /i !PPP_WAN! equ false (
- if not exist !PPPCFG! (call :setAccount %1) else (
- (call :getRASAutoDialName PPP_Name)
- for /f eol=[ tokens=2,4,6 delims==| %%a in (!PPPCFG!) do (
- (rasdial.exe !PPP_Name! %%b %%c)>!fn!
- )
- for /f delims= %%i in (!fn!) do (
- (set ln=%%i)
- if !ln:~0,3! equ 已連接 (color 2f)&(set PPP_WAN=true)&(set /p=!sPPP!已重新連上<nul)
- if !ln:~0,6! equ 遠程訪問錯誤 if /i %1 equ hide (call :showWindow show)&exit
- if !ln:~0,10! equ 遠程訪問錯誤 623 (
- (msg %username% !sPPP! 未建立,或已刪除或已改名,請檢查后繼續)&(start Control netconnections)&cls&pause
- )
- if !ln:~0,10! equ 遠程訪問錯誤 691 (msg %username% !sPPP!的用戶名和/或密碼錯誤,請重新輸入)&(call :setAccount %1)
- )
- )
- )
- )
- ping -n 2 127.1>nul
- goto loop
- exit /b&rem End of main program
- :getRASAutoDialName
- echo wscript.echo CreateObject(Wscript.Shell).RegRead(HKLMSOFTWAREMicrosoftRAS AutoDialDefaultDefaultInternet)>%windir%t~.vbs
- for /f delims= %%a in ('cscript //nologo %windir%t~.vbs') do set %1=%%a
- exit /b
- :setAccount
- if /i %1 equ hide (call :showWindow setAccount)&exit
- cls&color 9f&mode con lines=4 cols=80
- echo == 請輸入!sPPP!配置信息并保存到文件 !PPPCFG! ==&echo.
- (set /p PPP_Username= 用戶名:)
- (set /p PPP_password= 密碼:)
- (call :getRASAutoDialName PPP_Name)
- echo [!sPPP!配置]>!PPPCFG!
- echo !sPPP!名稱=!PPP_Name!^|用戶名=!PPP_Username!^|密碼=!PPP_password!>>!PPPCFG!
- echo ;請檢查上面的信息是否正確, 否則請更正并保存^(注意分隔符^|不可刪除或更改, 且不要加入任何多余的字符^)>>!PPPCFG!
- (start notepad !PPPCFG!)&pause
- mode con lines=2 cols=58
- exit /b
- :showWindow
- if /i %1 equ hide (set intWindowStyle=0) else (set intWindowStyle=5)
- mshta vbscript:createobject(wscript.shell).run(%~nx0 %1,!intWindowStyle!)(window.close)&&exit
- exit /b

