本文的批處理可以讓您知道自己所在局域網的同一網段下都有哪些IP被使用了。不得不承認,我在創造這個批處理的時候想法很奇怪,甚至有些愚蠢。
:::::::查看所有子網IP.bat:::::::
@echo off
title 查看所有子網IP
set /a Online=0
set /a Offline=0
set /a Total=256
set ExportFile=子網IP在線統計.txt
:: 初始化在線IP與不在線IP的個數為零,共掃描256個IP,結果輸出的文件名
set StartTime=%time%
:: 記錄程序的開始時間
for /f "delims=: tokens=2" %%i in ('ipconfig /all ^| find /i "IP Address"') do set IP=%%i
:: 獲得本機IP [注1]
if "%IP%"=="" echo 未連接到網絡 pause goto :EOF
if "%IP%"==" 0.0.0.0" echo 未連接到網絡 pause goto :EOF
:: 當IP為空或 0.0.0.0 時,提示未連接并退出該程序
for /f "delims=. tokens=1,2,3,4" %%i in ("%IP%") do (
set /a IP1=%%i
set /a IP2=%%j
set /a IP3=%%k
set /a IP4=%%l
)
:: 以句點為分隔符,分別將IP的四個十進制數賦給四個變量
set /a IP4=0
echo 在線的IP:>%ExportFile%
:: 初始化IP的第四個數值為零,并創建結果輸出文件
:RETRY
ping %IP1%.%IP2%.%IP3%.%IP4% -n 1 -w 200 -l 16>nul set /a Online+=1 echo %IP1%.%IP2%.%IP3%.%IP4%>>%ExportFile% || set /a Offline+=1
:: ping 目標IP [注2]
set /p =[將本文底部評論4中的退格符替換到此處]set /a Scanned=%Online%+%Offline%
set /a Progress=(%Online%+%Offline%)*100/%Total%
set /p =正在掃描:%Scanned%/%Total% 掃描進度:%Progress%%%:: 刪除當前行的內容,并重新顯示進度信息 [注3]
set /a IP4+=1
if %IP4% lss %Total% goto :RETRY
:: 當IP的第四個數值小于總數時,跳轉回 :RETRY 處,重復執行直到全部 ping 完為止
echo.
echo.
set EndTime=%time%
:: 記錄程序的結束時間
set /a Seconds = %EndTime:~6,2% - %StartTime:~6,2%
set /a Minutes = %EndTime:~3,2% - %StartTime:~3,2%
if %Seconds% lss 0 set /a Seconds += 60 set /a Minutes -= 1
if %Minutes% lss 0 set /a Minutes += 60
:: 計算時間差
set /a Percent=%Online%*100/(%Online%+%Offline%)
:: 計算在線百分比
echo 在線IP個數: %Online%
echo 不在線IP個數: %Offline%
echo 在線百分比: %Percent%%%
echo 統計耗時: %Minutes%分%Seconds%秒
echo 統計日期: %date% %time:~0,-3%
echo.>>%ExportFile%
echo 在線IP個數: %Online%>>%ExportFile%
echo 不在線IP個數: %Offline%>>%ExportFile%
echo 在線百分比: %Percent%%%>>%ExportFile%
echo 統計耗時: %Minutes%分%Seconds%秒>>%ExportFile%
echo 統計日期: %date% %time:~0,-3%>>%ExportFile%
echo 記錄已保存到文件"%ExportFile%"中
::顯示結果并將結果保存到文件中
pause
::::::::::::::::::::::::::::::::
注1. ipconfig 是內置于 Windows 的 TCP/IP 應用程序,用于顯示本地計算機網絡適配器的物理地址和IP地址等配制信息,這些信息一般用來檢驗手動配置的 TCP/IP 設置是否正確。當在網絡中使用 DHCP 服務時, ipconfig 可以檢測到計算機中分配到了什么IP地址,是否配置正確,并且可以釋放,重新獲取IP地址。這些信息對于網絡測試和故障排除都有重要的作用。[3]
更詳細的說明請參閱 ipconfig/? 。ipconfig /all ,參數 /all 表示查看詳細的網絡配置。命令 ipconfig /all ^| find /i "IP Address" 表示在 'ipconfig /all 的結果中,以 "IP Address" 為查找對象,進行搜索(其結果類似于:IP Address. . . . . . . . . . . . : 10.30.11.51 )。
而整條命令中的 for 語句,則表示在上述結果中,以冒號為間隔(delims=:),查找第2個字串(tokens=2)。很明顯,所找到的結果就是自己電腦當前的IP地址了(如果您只有一快網卡或是只啟用了一個網卡的話。顯然,對于多個網卡會顯示出多個IP的情況,我并沒有考慮的太全面)。[關于 for 更詳細請參閱 4.2.4 小節]
另外,注意到在 ipconfig /all ^| find /i "IP Address" 中有一個轉義字符 ^ ,它的作用是讓后面的管道命令 | 生效,而不是讓程序把 | 誤解為 for 語句里參數的一部分。
注2. ping 其實才是本批處理的核心部分。命令 ping 的主要作用是通過發送數據包并接收應答信息來檢測兩臺計算機之間的網絡是否連通。比如我可以輸入 ping 10.30.11.35 以便查看我是否能與我所在的局域網中IP為 10.30.11.35 的機器連通。如果我不懂批處理的話,也許我就得從 IP 10.30.11.1 開始,挨個地 ping 到 IP 10.30.11.255 ,才能達到我在本小節的最初目的。
在批處理中 ping 的3個參數 -n 1 -w 200 -l 16 分別表示:僅 ping 一遍[-n 1],等待200毫秒后按超時考慮[-w 200],發送16字節的數據[-l 16]。
另外,此命令行中同時用到了兩個 和一個 || 的組合命令,我不得不承認這種復雜的邏輯關系會給您帶來閱讀上的困難。
注3. 這里使用了 set /p =顯示內容
本文的使用程度并不大,卻很有趣,至少并沒有想象中的那么愚蠢。
您可能感興趣的文章:- 獲取外網IP地址的批處理代碼
- 批處理獲取網卡名稱的代碼(附修改IP、網關、DNS腳本)
- Windows下用命令行修改IP地址的方法詳解(附批處理文件)
- 批處理、VBS實現自動設置IP、默認網關、DNS、WINS、IE代理(全)
- 遠程批量修改計算機IP設置的批處理
- Windows批處理雙擊切換IP地址方便、快捷
- ip地址切換批處理腳本分享
- BAT批處理判斷IP地址并自動禁用啟用網卡
- 批處理bat設置固定IP地址和自動IP地址