Cần giúp đỡ về kiểm tra trạng thái ping hàng loạt ip

Mình tìm trên mạng thấy có cái code này để kiểm tra ping hàng loạt ip, nhưng lại chưa đúng yêu cầu mình lắm vì khi kết quả là destination host unreachable thì nó cũng trả về “ok”, chỉ khi nào request time out thì mới trả về “failed…”, Vậy mình muốn khi destination host unreachable cũng trả về “failed…” Thì sửa code sao ạ. Tiện thể cho mình hỏi đây là ngôn ngữ lập trình gì ạ

@echo off
for /f "delims=" %%a in (IPlist.txt) do ping -n 1 %%a >nul && (echo %%a ok >>IPresult.txt) || (echo %%a failed to respond >>IPresult.txt)
pause

Đây là “batch script” cậu ạ.
Câu lệnh của cậu diễn giải ở đây là với từng IP trong IPlist.txt, ping 1 lần tới địa chỉ đó (và không ghi kết quả ra màn hình).
Cụm

`<command A>` && `<command B>` || `<command C>`

là cách viết tắt của:

if `<command A>` success then `<command B>`
else `<command C>`

Do đó, đoạn && || có nghĩa là:

  • Nếu ping thành công, sẽ in ra "<IP> ok" vào file IPresult.txt.
    Tiếc là “destination host unreachable” cũng được coi là thành công (ừ, cậu dùng đồ Microsoft mà :smile:).
  • Nếu ping thất bại, sẽ in ra "<IP> failed to respond" vào file IPresult.txt.

Tớ không rành về batch script lắm (và cũng không có windows machine để chạy thử) nên tớ sẽ để các bạn khác giúp cậu phần sửa code. Hoặc cậu có thể tự học và viết ra theo ý cậu, dựa trên các thông tin ở trên :smile:

3 Likes

Chắc chuyển qua dùng find :slight_smile:

4 Likes

Cảm ơn cậu nhé :smiley:

là sao ạ :grinning: :grinning: :grinning: :grinning: :grinning:

là thay vì dựa vào && và || thì dùng pipe để find string có thể xuất hiện sau câu lệnh đầu tiên. Ví dụ nó hiện failed hoặc unreachable thì là fail.

4 Likes

Không nha bạn. Mình cho cần câu thôi, không cho bạn cá đâu.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?