@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%"
编辑 2
将两种解决方案都更改为使用子例程调用,以避免%ip% 在for 循环内过早扩展。 (也可以通过启用延迟扩展来解决。)
还到处引用%output%。