我正试图修改我在网上找到的一个蝙蝠文件以满足我的需要。
@ECHO Off
set startTime=%500%
ECHO Starting the IP Scan
FOR /L %%i IN (1,1,2) DO @(
ECHO Pinging IP Range: 10.163.%%i._
FOR /L %%z IN (1,1,10) DO @(
echo Pinging IP: 10.163.%%i.15
ping -n 1 -w 500 10.163.%%i.15 | FIND /i "Reply">>IPScanResults.txt
)
)
ECHO Run Time = %startTime% to %time%>>IPScanResults.txt
ECHO *** IP Scan Complete. ***
ECHO Check the file called IPScanResults.txt to see the results
ECHO Run Time = %startTime% to %time%
眼前的问题。。。我们在全国数百个办公室都有网络打印机。我们公司采用的是方差有限的通用标准。所有打印机都以15或16的第四个八位字节结束。变量将是IP的第二个和第三个八位字节。我可以为第二个八位位组变量制作第二个脚本,我最大的障碍是第三个八位位位组和输出。例如。。。。
我需要ping,识别来自10.163.X.15或10.163.X.16 IP地址内任何机器的响应,并将其导出到带有响应的txt文件中。X的范围是1-254。只需要一个ping响应,我不需要它以4-5个响应来响应,因为这只是一个"你在吗"测试。然后,我会为我们的网络编辑10.162.x.x和10.160.x.x
我对脚本不是很熟悉,我很想了解更多关于如何实现这一点的信息。谢谢
您几乎做到了,只是从未使用内部for /L
循环的变量%%z
:
@ECHO OFF
SET startTime=%time%
ECHO Starting the IP Scan
FOR /L %%i IN (1,1,2) DO (
ECHO Pinging IP Range: 10.163.%%i._
FOR /L %%z IN (1,1,10) DO (
ECHO Pinging IP: 10.163.%%i.%%z
PING -n 1 -w 500 10.163.%%i.%%z | FIND /i "Reply">>"IPScanResults.txt"
)
)
ECHO Run Time = %startTime% to %time%>>"IPScanResults.txt"
ECHO *** IP Scan Complete. ***
ECHO Check the file called "IPScanResults.txt" to see the results
ECHO Run Time = %startTime% to %time%
我使用这个变量作为第四个八位字节(而不是常量15
),因此控制台输出如下:
Starting the IP Scan Pinging IP Range: 10.163.1._ Pinging IP: 10.163.1.1 Pinging IP: 10.163.1.2 ... Pinging IP: 10.163.1.10 Pinging IP Range: 10.163.2._ Pinging IP: 10.163.2.1 Pinging IP: 10.163.2.2 ... Pinging IP: 10.163.2.10 *** IP Scan Complete. *** Check the file called "IPScanResults.txt" to see the results Run Time = 0:05:07.24 to 0:05:17.16
并且日志文件IPScanResults.txt
的内容可能如下所示:
Reply from 10.163.1.10: bytes=32 time<1ms TTL=128 Run Time = 0:05:07.24 to 0:05:17.16
此外,我缩进了for /L
循环以提高可读性,并在日志文件名周围加上引号,因此可能会对其进行更改,使其甚至包含空格而不会出现任何问题。
此外,我用%time%
交换了%500%
,因为我认为您想要存储开始时间。%500%
是一个无效的变量名,因为后面跟有数字的%
(本例中为%5
)表示脚本参数扩展——有关详细信息,请参阅call /?
。
提示:
如果其中一个八位字节没有连续值,例如160
、162
、163
,则可以使用标准的for
循环而不是for /L
:
FOR %%j IN (160 162 163) DO (
PING -n 1 -w 500 10.%%j.1.15
)
无论如何,我会用以下脚本完成你的任务,很可能是因为它的灵活性:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem Define constants here:
set "LOGFILE=IPScanResults.txt"
rem Define IP octets here:
set "OCTET1=10" & rem (a single value)
set "OCTET2=160 162 163" & rem (space-separated list of values)
set "OCTET3=1,1,254" & rem (comma-separated range (min.,step,max.))
set "OCTET4=15,1,16" & rem (comma-separated range (min.,step,max.))
rem Prepare `for` switch `/L` dynamically:
for /L %%O in (1,1,4) do (
if not "!OCTET%%O!"=="!OCTET%%O:,=!" set "SWITCH%%O=/L"
)
set "STARTTIME=%TIME%"
if exist "%LOGFILE%" (>> "%LOGFILE%" echo()
echo Starting the IP Scan
for %SWITCH1% %%I in (%OCTET1%) do (
for %SWITCH2% %%J in (%OCTET2%) do (
echo Pinging IP Range: %%I.%%J.__.__
for %SWITCH3% %%K in (%OCTET3%) do (
for %SWITCH4% %%L in (%OCTET4%) do (
echo Pinging IP: %%I.%%J.%%K.%%L
ping -n 1 -w 500 %%I.%%J.%%K.%%L | >> "%LOGFILE%" find "TTL"
)
)
)
)
>> "%LOGFILE%" echo Run Time = %STARTTIME% -- %TIME%
echo *** IP Scan Complete. ***
echo Check the file called "%LOGFILE%" to see the results.
echo Run Time = %STARTTIME% -- %TIME%
endlocal
exit /B