未注释代码:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
del alivehosts.txt
set input=%1%
::echo %input%
for /L %%A in (1, 1, 254) do (
SET "NUM=%%A"
SET target=%input%!NUM!
::echo !target!
for /F %%i in ('ping !target! -n 1 ^| find /i "TTL" /c') do (
if %%i equ 1 (
echo !target! ----^> alive
echo !target! >> alivehosts.txt ) else (
echo !target! ----^> died )
)
)
注释版本:
@echo off
:: 要想在for循环中将数字转换成字符串,需要SETLOCAL ENABLEDELAYEDEXPANSION
::而且变量要使用!variables!而不是%variables%
SETLOCAL ENABLEDELAYEDEXPANSION
del alivehosts.txt
set input=%1%
::echo %input%
for /L %%A in (1, 1, 254) do (
SET "NUM=%%A"
SET target=%input%!NUM!
::echo !target!
::由于|是特殊字符,需要转义,使用^进行转意义
::bat脚本的变量赋值不像linux那么简单,需要借助for循环来进行变量的赋值
for /F %%i in ('ping !target! -n 1 ^| find /i "TTL" /c') do (
if %%i equ 1 (
echo !target! ----^> alive
echo !target! >> alivehosts.txt ) else (
echo !target! ----^> died )
)
)
)
使用示例:
检查192.168.31.0/24
的存活主机
alive.bat 192.168.31.
存活的主机会被输出到 alivehost.txt 中