我想制作一个 .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 的 IP 发送到 txt 文件。这可以通过 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
).
对于相反的情况也有类似的方法。如果您想对命令的不成功结果执行某些操作,您可以输入||
之后是执行您的操作的命令。
EDIT
关于的一则注释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
将两种解决方案更改为使用子例程调用,以避免过早扩展%ip%
在 - 的里面for
环形。 (也可以通过启用延迟扩展来修复。)
还引用了%output%
到处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)