Я давным-давно вот такую штуку писал. Да, длинная. Да, неоптимизированная. Но работает, и защищено от ввода некорректных значений, плюс можно выбирать любые диапазоны.
Код:

@Echo Off
Del tmp
Title Сканер сети
:Main
Cls
Echo.
Echo.
Echo Введите начало диапазона IP-адресов для сканирования
Echo в формате х.х.х.х
Echo.
Set /P IP_start=^>
Echo #%IP_start%>tmp
Echo.
Echo.
Echo Введите конец диапазона IP-адресов для сканирования
Echo в формате х.х.х.х
Echo.
Set /P IP_end=^>
Echo @%IP_end%>>tmp
For /F "eol=@ delims=. tokens=1,2,3,4" %%A In (tmp) do (Set Start_1=%%A&Set Start_2=%%B&Set Start_3=%%C&Set Start_4=%%D)
Set Start_1=%Start_1:~1%
For /F "eol=# delims=. tokens=1,2,3,4" %%A In (tmp) do (Set End_1=%%A&Set End_2=%%B&Set End_3=%%C&Set End_4=%%D)
Del tmp
Set End_1=%End_1:~1%
Set /A ErrLvl=0
Set /A Succes=0
Set /A Fail=0
Set /A Complete=0
Set Begin=[%date% - %time:~-0,5%]
Set Current_1=%Start_1%&Set Current_2=%Start_2%&Set Current_3=%Start_3%&Set Current_4=%Start_4%
Echo ╬Єў╕Є LanScan чр [%date% - %time:~-0,5%]>result.txt
Echo (─шрярчюэ %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4%)>>result.txt
Echo └ъЄштэ√х їюёЄ√:>>result.txt
Echo.>>result.txt
:Scan
Ping -n 1 -w 400 %Current_1%.%Current_2%.%Current_3%.%Current_4%>nul
If "%ErrorLevel%" GEQ "1" (Set /A Fail=Fail+1) Else Set /A Succes=Succes+1
If "%ErrorLevel%"=="0" Echo %Current_1%.%Current_2%.%Current_3%.%Current_4%>>result.txt
If "%Current_1%"=="%End_1%" Set Complete=1
If "%Current_2%"=="%End_2%" Set Complete=%Complete%1
If "%Current_3%"=="%End_3%" Set Complete=%Complete%1
If "%Current_4%"=="%End_4%" Set Complete=%Complete%1
If "%Complete%"=="1111" GoTo EndScan
Call :Output
Set /A Current_4=Current_4+1
If "%Current_4%"=="256" Set /A Current_4=0 & Set /A Current_3=Current_3+1
If "%Current_3%"=="256" Set /A Current_3=0 & Set /A Current_2=Current_2+1
If "%Current_2%"=="256" Set /A Current_2=0 & Set /A Current_1=Current_1+1
GoTo Scan
:Output
Set /A Total=Fail+Succes
Cls
Echo.
Echo.
Echo [%date% - %time:~-0,5%] - начато сканирование
Echo Выбранный диапазон: %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4%
Echo Активных хостов: %Succes%
Echo Неактивных хостов: %Fail%
Echo Всего хостов: %Total%
Echo Текущий адрес: %Current_1%.%Current_2%.%Current_3%.%Current_4%
Exit /B
:ErrMsg
Cls
Echo.
Echo.
Echo Конечный адрес диапазона больше начального, проверьте правильность ввода
Echo Нажмите любую кнопку для продолжения
Pause>Nul
GoTo Main
:EndScan
Set /A Total=Fail+Succes
Cls
Echo.
Echo.
Echo Выбранный диапазон: %Start_1%.%Start_2%.%Start_3%.%Start_4% - %End_1%.%End_2%.%End_3%.%End_4%
Echo Всего хостов обработано: %Total%
Echo из них активных: %Succes% неактивных : %Fail%
Echo Скрипт стартовал: %Begin%
Echo Обработка закончена: [%date% - %time:~-0,5%]
Echo Сканирование закончено, результат выведен в result.txt
Echo.
Echo Нажмите любую кнопку для продолжения
Pause>Nul
Exit