最近我遇到了很多互联网连接中断问题。所以我想列出每次遇到问题的时间,并将其发送给我的ISP。为了使它不那么乏味,我想到可以制作一种报告并将其作为日志文件发送。我发现了一些解决方案,但我找到的最好的是Joost Kuin的Ping with timestamp。
我稍微修改了一下这个代码,但我遇到了一个问题。如果我尝试使用if not %errorlevel% 0 do (...)
、if %errorlevel% 1 do (...)
并尝试运行.bat文件,Windows命令处理器窗口会弹出并消失。没有这个条件,批处理文件就可以正常运行。但它不做它被设计来做的事情。我想制作2个文件,一个只有简单的ping日志,另一个只有超时和“目标主机不可达”的时间戳。这是我第一次为Windows编写脚本。我过去习惯于在C++中编写代码。相对于host_ip,我得到了外部网络的IP地址。
@echo off
set host=host_ip
set logfile=Ping_test.log
set logfile_fail=Ping_test_fail.log
echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1') do (echo (%%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
if not %errolevel% 0 do (echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% errorlvel %errorlevel% %%A>>%logfile_fail%)
echo %errorlevel% %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
timeout 1 >NUL
GOTO Ping
)
编辑:
谢谢你的有益建议。我已经尝试将它们实施,并继续独立寻找解决方案。经过很多时间和挫折,我终于完成了它。我不得不更改几行代码(如下所示),以根据for /F
命令指令的执行情况(在另一个命令处理过程中)进行操作。但最终我完成了我可说是第一个真正有用的代码,老实说,这让我意识到批处理脚本是多么有用。;)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ^& call echo %%^^errorlevel%%^>error.level') do (
set /p elv=<"error.level"
if not !elv!==0 (echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile_fail%)
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
echo elv %elv% %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
timeout 1 >NUL
GOTO Ping
)
再次感谢您的帮助!
非常感谢您的帮助!
if not %errolevel%
应该是if not %errorlevel%
。 - DavidPostill