我想作一个.bat文件,会做一个for循环象下面这样:批处理文件 - 环平 - 输出到文件均达到主机
@echo off
FOR /L %%G IN (1, 1, 69) DO (
ping -n 1 192.168.%%G.3
ping -n 1 192.168.%%G.4
)
然后通过输出看,只有送成功回复ping到txt文件的IP。这可能与CMD批处理文件?
我想作一个.bat文件,会做一个for循环象下面这样:批处理文件 - 环平 - 输出到文件均达到主机
@echo off
FOR /L %%G IN (1, 1, 69) DO (
ping -n 1 192.168.%%G.3
ping -n 1 192.168.%%G.4
)
然后通过输出看,只有送成功回复ping到txt文件的IP。这可能与CMD批处理文件?
@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%
无处不在。
@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
它适合你吗? – 2013-06-16 15:18:12
伟大的Andriy!非常感谢您的帮助。 – user597875 2011-02-21 16:25:47