參考了博客園Alfred Zhao的文章《Windows平台ping測試局域網所有在用IP》
在cmd命令行運行如下命令即可:
for /L %i in (10,1,80) do ping -n 1 -w 60 172.24.240.%i | find "回復" >>pingall.txt
這一條命令是ping局域網內地址范圍在172.24.240.10~172.24.240.80的所有主機。ping的結果會輸出到執行命令的目錄里面的pingAll.txt文件。
注意:運行結果是追加到pingAll.txt文件的,不會新建立pingAll.txt文件。
運行樣例如下:
本樣例ping局域網內IP地址段:172.24.240.10~172.24.240.15的所有主機。運行過程和結果如下圖所示。
運行結束后,會在D盤根目錄生成pingAll.txt文件,文件內容如下:
從運行結果看,172.24.240.14和172.24.240.15兩個ip的主機ping不通。
下面詳細解釋上面的這條命令:
用到了for、ping和find命令,並且把運行的結果輸出到文本。
for命令的詳細說明
(這里刪除了本文不用的那一部分說明)
C:\Users\most>for /?
對一組文件中的每一個文件執行某個特定命令。
FOR %variable IN (set) DO command [command-parameters] %variable 指定一個單一字母可替換的參數。 (set) 指定一個或一組文件。可以使用通配符。 command 指定對每個文件執行的命令。 command-parameters 為特定命令指定參數或命令行開關。 在批處理程序中使用 FOR 命令時,指定變量請使用 %%variable 而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同於 %I.
如果啟用命令擴展,則會支持下列 FOR 命令的其他格式:
……
FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列
1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)
……
ping命令
本文開頭那條命令用到了ping命令,並且含有參數-n 1,表示只發送一個數據包.
另外,ping命令還加了-w 60 參數表示超時時間60ms。
find命令
C:\Users\most>find /? 在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
/V 顯示所有未包含指定字符串的行。
/C 僅顯示包含字符串的行數。
/N 顯示行號。
/I 搜索字符串時忽略大小寫。
/OFF[LINE] 不要跳過具有脫機屬性集的文件。
"string" 指定要搜索的文本字符串。
[drive:][path]filename
指定要搜索的文件。
如果沒有指定路徑,FIND 將搜索在提示符處鍵入 的文本或者由另一命令產生的文本。
C:\Users\most>
本文開頭那條命令里面的find指令搜索的范圍是ping產生的文本。利用find搜索含有“回復”這兩個字的字符串,並把搜索結果顯示出來。
顯示的搜索結果之所以被輸出到文本文件,是因為用了">>"符號。具體介紹看《將cmd中命令輸出保存為TXT文本文件》
說的有點亂,其實就是想記一下筆記。
后來發現其實有現成工具可以做這個事情: