2011-02-18 32 views

回答

6
@ECHO OFF 
SET output=%USERPROFILE%\output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /L %%G IN (1, 1, 69) DO (
    CALL :ping 192.168.%%G.3 
    CALL :ping 192.168.%%G.4 
) 
GOTO :EOF 

:ping 
ping -n 1 %1 >NUL && ECHO %1>>"%output%" 

基本上,你用&&添加如果先前的命令(一个&&之前)成功完成时,才会执行命令(从技术上说,返回的0的退出代码)。

对于相反的情况也有类似的方法。如果您想对命令的不成功结果执行一些操作,则在其后面输入||,然后执行您的操作。

编辑

一个说明有关ping。有时你会从路由器得到一个通知,说明主机不可访问。在这种情况下,ping仍然以0代码('成功')退出,因为它确实得到了答复,即使它来自路由器而不是来自实际主机。

如果您的主机可能出现这种情况,并且您不希望在输出文件中出现此类误报,则您必须解析某些关键字的输出ping,以指示ping是否确实成功。到目前为止,您可以依靠显示汇总统计信息的行:它们只在回复来自预期主机时才会显示。

所以,这里的另一种方法:

@ECHO OFF 
SET output=%USERPROFILE%\output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /L %%G IN (1, 1, 69) DO (
    CALL :ping 192.168.%%G.3 
    CALL :ping 192.168.%%G.4 
) 
GOTO :EOF 

:ping 
ping -n 1 %1 | find "Approximate round trip" >NUL && ECHO %1>>"%output%" 

EDIT 2

都修改了解决方案,使用子程序调用,以避免for循环内的%ip%过早扩张。 (也可以通过启用延迟扩展来修复)

还引用%output%无处不在。

+0

伟大的Andriy!非常感谢您的帮助。 – user597875 2011-02-21 16:25:47

-1
@echo off 
:A 
FOR /L %%G IN (1, 1, 69) DO (
    ping -n 1 192.168.%%G.3 
    ping -n 1 192.168.%%G.4 
) 
:GoTo 
+0

它适合你吗? – 2013-06-16 15:18:12

相关问题