我知道这是一个已经问过的问题的变体,但经过研究和几次失败的尝试,我想我需要一些帮助。
我想重复 ping 两个网站并将时间和结果记录在文本文件中。
我发现这个问题将 Ping 输出保存到文本文件中非常有用,但我尝试过的几个版本都没有用。
如果我在命令窗口中执行以下操作,它会在我的用户目录中创建文本文件,正如我预期的那样,并正确记录重复的 ping。
ping xxx.xxx.xxx.xxx -t > filename.txt
但是,如果我创建以下 ping.dat 文件并将其保存在我的桌面上。当我运行它时,它既会打开一个包含时间的 cmd 窗口,也会在我的桌面上创建所需的文本文件。不幸的是,该文件仅包含时间,而不包含 ping 结果,而且结果显然不像预期的那样相隔 3 秒。
@ECHO OFF
:LOOPSTART
time /T
ping xxx.xxx.xxx.xxx -n 4 >> filename.txt
ping yyy.yyy.yyy.yyy -n 4 >> filename.txt
sleep -m 3000
GOTO LOOPSTART
我认为我的问题与我尝试写入结果的方式有关,但是如果我修改批处理文件,删除'>> filename.txt'引用,它所做的就是打开一个 cmd 窗口,该窗口会立即填满时间戳。
@ECHO OFF
:LOOPSTART
time /T
ping xxx.xxx.xxx.xxx -n 4
ping yyy.yyy.yyy.yyy -n 4
sleep -m 3000
GOTO LOOPSTART
因此我的问题是
A) 知道我做错了什么吗?
B)如何更改时间戳,使其为 HH:MM:SS 而不是 HH:MM
感谢所有帮助。
年代。
@LInker3000 感谢您的回复。我应该在最初的问题中提到这一点,但我已经尝试过了。当我将“>> filename.txt”添加到时间戳时,我现在会得到一个命令窗口,其中显示“该进程无法访问该文件,因为它正在被另一个进程使用。”。终止该进程后,创建的 txt 文件只有一个时间戳和“终止批处理作业(Y/N)”文本。
答案1
如果您也希望文件中包含时间戳,则需要输入:
time /T >> filename.txt
在第一个例子中你引用了:
@ECHO OFF
:LOOPSTART
time /T >> filename.txt
ping xxx.xxx.xxx.xxx -n 4 >> filename.txt
ping yyy.yyy.yyy.yyy -n 4 >> filename.txt
sleep -m 3000
GOTO LOOPSTART
您可以尝试使用以下代码来获得更可配置的时间戳:
set time_hh=%time:~0,2%
if %time_hh% lss 10 (set time_hh=0%time:~1,1%)
set time_mn=%time:~3,2%
set time_ss=%time:~6,2%
set time_ms=%time:~9,2%
echo %time_hh%:%time_mn%:%time_ss%.%time_ms% >> filename.txt
把所有这些放在時間/t...线
答案2
要获取秒数(和毫秒),请替换time /T
为echo %time%
:
@ECHO OFF
:LOOPSTART
echo %time% >> filename.txt
ping xxx.xxx.xxx.xxx -n 4 >> filename.txt
ping yyy.yyy.yyy.yyy -n 4 >> filename.txt
sleep -m 3000
GOTO LOOPSTART
答案3
尝试一下我的模板。它会要求您输入主机 IP。只需将其另存为.bat
并运行即可。出现提示时输入主机 IP。
@echo off
set/p host=host Address:
set logfile=Log_%host%.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%
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
timeout 1 >NUL
GOTO Ping)
答案4
@ECHO OFF
:SERVER1
for /F "tokens=* skip=2" %%A in ('ping -n 1 0.0.0.1 ') do (
echo %date% %time% %%A >>filename.txt
goto SERVER2
)
:SERVER2
for /F "tokens=* skip=2" %%A in ('ping -n 1 0.0.0.1 ') do (
echo %date% %time% %%A >>filename.txt
goto SERVER1
)
EXIT