其實,小弟的發想是...
寫一個BAT,讓User判斷網路不通時,該檢查什麼?
所以,我BAT檢查的順序:
第一關會是,有沒有Gateway
第二關會是,ping不ping的到Gateway
第三關會是,ping不ping的到外網。
■問題1、 IF ELSE...我有試著要加入BAT內...
不過,echo的訊息會有問題...
...我現在下面的《測試項目二》即使ping不到Gateway,還是會ECHO出正常的訊息!
■問題2、當ECHO 錯誤訊息時,希望能夠變字!
※整個BAT最後想要調整到....
1、當第一關,發現沒有Gateway時,提示完後,不做第二關及第三關的測試
2、當第二關,發現ping不到Gateway時,不做第三關的測試。
3、當有錯誤時,ECHO的字,希望能夠變色。
再勞煩各位大大指教一下!
@if "%1" == "max" goto top
@start "" /max "%~nx0" max
@exit
:top
@Set title=Network Eevironment Ping Tester
@(color 1F) & (@Title %title%)
@echo:
::# Define a temp variable 'DefaultGateway'
@For /f "tokens=3" %%* in (
'route.exe print ^|findstr "\<0.0.0.0\>"'
) Do @Set "DefaultGateway=%%*"
::# Redirect output to a textfile
@echo 《%title%》
@echo 測試時間:%Date% %time%
@echo:
@echo 《測試項目一》此電腦,是否有連接到區網?
@IF "%DefaultGateway%"=="" (
@Echo ▲ 測 試 結 果 → 請 檢 查 網 路 線 !
@echo:
) else (
@Echo ㊣ 測 試 結 果 → 《區 域 網 路》 正 常 ! ㊣
@echo -----------------------------------
@echo 《測試項目二》測試閘道器是否正常?
@ping %DefaultGateway% -n 3
@echo:
@IF %errorlevel%==0 echo ※ 《測試項目一》→《IP分享器》IP位置:%DefaultGateway%
@IF %errorlevel%==0 echo ㊣ 測 試 結 果 → 《IP分享器》 正 常 ! ㊣
@IF %errorlevel%==1 echo ※ 《測試項目一》→《 IP分享器》IP位置: %DefaultGateway%
@IF %errorlevel%==1 echo ▲ 測 試 結 果 → 請 重 開 ! 《I P 分 享 器 》!
)
@echo -----------------------------------
@ping 127.0.0.1 -n 2 -w 1000 > nul
@echo:
@echo 《測試項目三》測試對外網路是否正常?
@ping 168.95.1.1 -n 3
@echo:
@IF %errorlevel%==0 echo ※ 《測試項目二》→《對外網路》測試位置:168.95.1.1
@IF %errorlevel%==0 echo ㊣ 測 試 結 果 → 《 中 華 電 信 小 烏 龜 》 正 常 ! ㊣
@IF %errorlevel%==1 echo ※ 《測試項目二》→《對外網路》測試位置:168.95.1.1
@IF %errorlevel%==1 echo ▲ 測 試 結 果 → 請 重 開 ! 《 中 華 電 信 小 烏 龜 》!
@IF %errorlevel%==1 echo:
@IF %errorlevel%==1 echo 〒 中華電信ADSL障礙申告專線:0800-080-128
@echo -----------------------------------
@ping 127.0.0.1 -n 2 -w 1000 > nul
@echo:
@echo:
@echo ------------------ ※ 測 試 結 束 ! ------------------
@echo:
@pause
exit
請參考
沒有詳細測試,基本測試沒有問題.
說明:
Set AnsiRed 設定為紅字黑底
Set AnsiEnd 結束設定色彩,若設定過色彩後將會返回原黑底色所以需要以[44m將後續設為藍底
前置編碼(字符)ESC(Alt+27)無法以記事本輸入,需以 Notepad++ 編輯器輸入
目前彩色效果僅加在
echo %AnsiRed%㊣ 測 試 結 果 → 《IP分享器》 正 常 ! ㊣%AnsiEnd%
請自行調整其它欲變色的位置,只需在變色字串前加上%AnsiRed% 及結束位置加上%AnsiEnd%即可
Echo Off
if "%1" == "max" goto top
start "" /max "%~nx0" max
exit
:top
Set title=Network Eevironment Ping Tester
Set AnsiRed=[31m[40m
Set AnsiEnd=[0m[44m
(color 1F) & (@Title %title%)
echo 《%title%》
echo 測試時間:%Date% %time%
echo:
::# Define a temp variable 'DefaultGateway'
For /f "tokens=3" %%* in ('route.exe print ^|findstr "\<0.0.0.0\>"') Do (
echo 《測試項目一》此電腦,是否有連接到區網?
Echo ㊣ 測 試 結 果 → 《區 域 網 路》 正 常 ! ㊣
echo -----------------------------------
echo 《測試項目二》測試閘道器是否正常?
ping -n 3 %%* && (
echo:
echo ※ 《測試項目一》→《IP分享器》IP位置:%%*
echo %AnsiRed%㊣ 測 試 結 果 → 《IP分享器》 正 常 ! ㊣%AnsiEnd%
)||(
echo ※ 《測試項目一》→《 IP分享器》IP位置: %%*
echo ▲ 測 試 結 果 → 請 重 開 ! 《I P 分 享 器 》!
Goto :End
)
echo -----------------------------------
ping 127.0.0.1 -n 2 -w 1000 > nul
echo:
echo 《測試項目三》測試對外網路是否正常?
ping -n 3 168.95.1.1 && (
echo:
echo ※ 《測試項目二》→《對外網路》測試位置:168.95.1.1
echo ㊣ 測 試 結 果 → 《 中 華 電 信 小 烏 龜 》 正 常 ! ㊣
)||(
echo ※ 《測試項目二》→《對外網路》測試位置:168.95.1.1
echo ▲ 測 試 結 果 → 請 重 開 ! 《 中 華 電 信 小 烏 龜 》!
echo:
echo 〒 中華電信ADSL障礙申告專線:0800-080-128
)
echo -----------------------------------
Goto :End
)
Echo ▲ 測 試 結 果 → 請 檢 查 網 路 線 !
:End
ping 127.0.0.1 -n 2 -w 1000 > nul
echo ------------------ ※ 測 試 結 束 ! ------------------
pause
補充:用route 來抓預設閘道(findstr "<0.0.0.0>")可能會有預期外的結果,用pathping (內部IP分享器) 或 tracert (公網閘道)或許也是不錯的方式.
圖中第二筆才是我防火牆IP,第一筆為VPN的IP
蟹老闆大大 感謝您抽空回應!
我使用您的code貼到Notepad++後,
編碼選擇『編譯成ANSI碼』另存成BAT後,
執行...還是不會變色!
後來參考ami_jslian大大回應的內容後,
安裝完後,在執行您的BAT,就有正常顯示顏色了!
不過,我後來,還是試著在Notepad++上,
試著輸入《前置編碼(字符)ESC》
我試了按住左邊ALT或右邊ALT→再按2→再按7
或是ALT+2+7三顆按鍵同時按...
都打不出《前置編碼(字符)ESC》.....@@|||
還是很感謝您!
這有一批牛肉(有用資訊)好便宜
再補充一下
用16進制看文件內容,那個1B(也就是ALT+27)就是前置字元
小成
專業解析
我終於打出來了...我發現原因了…
我要按住左邊的ALT鍵後,再按下獨立字鍵上的2→7,再放開左邊ALT後,前置編碼(字符)ESC》就出來了!
我之前一直按住左邊的ALT鍵後,我是按下鍵盤W上面的2→鍵盤U上面的7....才一直打不出來!
太感謝小成大大了!
還幫忙錄影片!
要控制文字效果,首先要讓 DOS BOX 支援 ANSI 控制碼。
http://asika.windspeaker.co/post/3496-windows-cmd-ansi