iT邦幫忙

0

bat檔問題

  • 分享至 

  • xImage

想要寫一支bat檔,找不到指令
功能:
我要知道192.168.1.22這個ip是否有設備在使用,當設備上線時就寫一個記錄下來,
我記得有一指令可以像迴圈一樣一直ping這個ip,直到這個ip有回應才往下執行

迴圈 ping 192.168.1.22 一直到有回應時 <=這個部分不會寫
echo 192.168.1.22 %date%%time% 上線了 >a.txt

可以的話看能不能在補一段,繼續ping,我想知道他什麼時候離線

求解,感謝

goto 或 loop
自行去查一下dos或bat檔的語法就有
CalvinKuo iT邦大師 7 級 ‧ 2018-09-21 14:00:13 檢舉
google用 ip scanner 可以找出類似軟體,可以不用自己寫批次。
一般來說, 會設計成每分鐘執行一次. 這樣就不會有需要LOOP的問題. 當然, 如果對結果需要以秒為等級, 那就乖乖的去查語法吧.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
蟹老闆
iT邦大師 1 級 ‧ 2018-09-21 23:07:24
最佳解答

這是我自用的,與你說的有些差異,參考看看

@Echo off
Cls
Set Count=0
Set Flag=3
Set Address=220.1.2.3
Set StartTime=%Date%--%Time%
Set TempName=PingTest
:Loop
Set Time0=0000000000%Time::=%
::上一行避免0點時位數只有一個,將取得的時間格式化為固定10+時間位數。
Set Date0=%Date:/=%
Set FileStr=%Date0:~0,8%%Time0:~-10,7%
::上一行為了避免時間為0點時發生錯誤將格式化後的時間存入日誌檔檔名。
Set FileName=%FileStr: =%
Echo 測試項目:連線狀態>>%FileName%.Log
Echo 目標位址:%Address%>>%FileName%.Log
Echo 開始時間:%StartTime%>>%FileName%.Log
Echo 日誌時間:%FileName%>>%FileName%.Log
Echo ---------------------------------初始路由表--------------------------------->>%FileName%.Log
Route Print >> %FileName%.Log
Echo.>>%FileName%.Log
Echo ---------------------------------初始位址解析--------------------------------->>%FileName%.Log
Arp -a >>%FileName%.Log
Echo. >>%FileName%.Log
:ReStart
Echo.
Echo 這個程式是由鼎爾資訊進行連線測試用,請不要關閉。
Set /a Count=%Count% +1
Ping /n %Flag% %Address% >%TempName%
::Findstr "已遺失 = 0" %TempName%
If %ErrorLevel% NEQ 0 (
Echo =====錯=====誤=====發=====生===== %date%-%time% =====錯=====誤=====發=====生=====>>%FileName%.Log
Type %TempName% >>%FileName%.Log
Echo. >>%FileName%.Log
Echo ---------------------------------錯誤時路由表--------------------------------->>%FileName%.Log
Route Print >> %FileName%.Log
Echo. >>%FileName%.Log
Echo ---------------------------------錯誤時位址解析------------------------------->>%FileName%.Log
Arp -a >> %FileName%.Log
Echo. >> %FileName%.Log
Echo 出錯了 ^! 無法取得 %Address% 的回應^(%Time%^)^!^!^!
) Else (
Type %TempName%
)
If %Count% EQU 1000 (
Set /a Count=0
Echo -----------------這裡是日誌檔的結尾----------------->>%FileName%.Log
Echo 已執行一千次,將寫入新的日誌檔。
Goto Loop
)
Echo %Count%
Goto ReStart
Goto :EOF
蟹老闆 iT邦大師 1 級 ‧ 2018-09-21 23:24:48 檢舉

這個較能符合需求
Sec 是每次測試後要等待的秒數
IP 就 IP
Ping 未超時的記錄在OK.LOG 失敗的記錄在NG.LOG

@Echo Off
Set Sec=1
Set IP=168.95.1.1
:Loop
Echo. 循環測試中........
(ping -n 1 %IP%>Nul)&&(Echo. %IP% --- %Date%-%Time% >>OK.log)||(Echo. %IP% --- %Date%-%Time%>>NG.log)
Timeout /t %Sec%
Goto :Loop

gnnuppke iT邦新手 5 級 ‧ 2018-09-26 08:45:50 檢舉

太棒哩感謝

我要發表回答

立即登入回答