2

Я знаю, что это вариант уже заданного вопроса, но после исследования и нескольких неудачных попыток, мне кажется, мне нужна помощь.

Я хотел бы пинговать два веб-сайта неоднократно и записывать время и результаты в текстовом файле.

Я нашел этот вопрос Сохранить вывод Ping в текстовом файле очень полезным, но несколько версий, которые я пробовал, не работают.

Если я выполню следующее в командном окне, он создаст текстовый файл в моем каталоге пользователей, как и следовало ожидать, с повторяющимися эхо-запросами, записанными правильно.

ping xxx.xxx.xxx.xxx -t > filename.txt

Но если я создам следующий файл ping.dat и сохраню его на рабочем столе. Когда я запускаю его, он одновременно открывает окно cmd с нужным временем, а также создает нужный текстовый файл на моем рабочем столе. К сожалению, файл содержит только время, а не результаты проверки связи, и результаты, очевидно, не разделены на 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

Отсюда и мои вопросы

А) Есть идеи, что я делаю не так?

Б) Как мне изменить отметку времени так, чтобы она была ЧЧ: ММ: СС, а не ЧЧ: ММ

Вся помощь приветствуется.

С.

@ LInker3000 Спасибо за ответ. Я должен был упомянуть об этом в своем первоначальном вопросе, но я уже попробовал это. Когда я добавил '>> filename.txt' к отметке времени, теперь я получаю окно команды, которое заполняется текстом: «Процесс не может получить доступ к файлу, потому что он используется другим процессом». После завершения процесса созданный текстовый файл имеет только одну временную метку и текст «Завершить пакетное задание (Y/N)».

4 ответа4

3

Если вы также хотите указать временную метку в файле, вам нужно поставить:

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

Поместите все это вместо строки времени / т ...

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
0
@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
0

Попробуйте мой шаблон. Он попросит у вас хост 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .