Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ping со временем и датой

Ответить
Настройки темы
CMD/BAT - [решено] Ping со временем и датой

Ветеран


Сообщения: 1636
Благодарности: 50

Профиль | Отправить PM | Цитировать


Друзья, подскажите, пожалуйста, готовый скрипт, который бы выводил результаты пинга с датой и временем?

В инете есть варианты, но что-то на нужное не наткнулся...


Спасибо!

Отправлено: 22:03, 20-04-2015

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


1. Где находится батник?
2. Что выводит %path% (из консоли):
Код: Выделить весь код
for %i in ("%path:;=";"%") do @echo %i
3. Есть ли c:\windows\system32\ping.exe?
4. Есть ли другие исполняемые файлы (echo %pathext%) с именем ping.*, которые находятся в любом из каталогов %path%
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:35, 30-11-2015 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


The_Immortal, я бы для начала убрал все перенаправления в файл, открыл консоль, запустил пакетный файл и посмотрел на его вывод.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:37, 30-11-2015 | #22


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Еще можно поискать 1.txt:
Код: Выделить весь код
dir /b /s /a C:\1.txt
Это конечно займет некоторое время.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:48, 30-11-2015 | #23


Ветеран


Сообщения: 1636
Благодарности: 50

Профиль | Отправить PM | Цитировать


Господа, я прошу простить меня. В корне диска С лежала скаченная самопальная утилита ping.exe, которая и запускалась при выполнении скрипта... Запускалась она в полном фоне, поэтому я её и не видел

Foreigner, в вышеуказанном скрипте пинг происходит 4 раза (стандартно), после этого результат записывается в файл и скрипт завершается, а нужна бесконечность.
Я попробовал так:
Код: Выделить весь код
@echo off
setlocal
1>nul chcp 866

for /f "tokens=*" %%i in ('"ping ya.ru -t | findstr "TTL=""') do call:1 %%i
goto:eof

:1
1>nul chcp 1251
1>>C:\1.txt echo %date% %time%: %*
1>nul chcp 866
Но так работать не захотело.

Отправлено: 16:22, 30-11-2015 | #24


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата The_Immortal:
Но так работать не захотело. »
Если пинг бесконечный, то лучше сделать много пингов:
Код: Выделить весь код
@echo off
setlocal
1>nul chcp 866


:1
1>nul timeout /t 1
for /l %%i in (0,1,9) do (

	for /f "tokens=*" %%j in ('"ping -n 1 ya.ru | findstr "TTL=""') do (

		if %%i geq 9 goto:1
		call:2 %%j

))

goto:eof

:2
1>nul chcp 1251
1>>1.txt echo %date% %time%: %*
1>nul chcp 866
timeout -- чтобы не сильно загружать систему
Выйти из батника Ctrl+C

Последний раз редактировалось Foreigner, 30-11-2015 в 17:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:06, 30-11-2015 | #25


Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем привет.
Очень помогло данное решение.
Но, если пинговать IP-адрес или имя компьютера, то файл не создаётся.
Подскажите как решить эту проблему?

UPD: оказывается, если пингуемый хост недоступен, то лог не пишется.
Как можно доработать код, чтобы в файл писалось, что пинг не прошёл?

Последний раз редактировалось Duber123, 23-07-2022 в 19:40.


Отправлено: 19:30, 23-07-2022 | #26


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	Set /A TWait=1
	Set "Addr=lenta.ru"

	Set "Log=Z:\Soft_Out\Ping.log"

	:Begin
		Set "Str="
		FOR /F "usebackq delims=" %%p IN (`ping -n 5 %Addr%`) DO Set "Str=%%p"
		>>"%Log%" Echo %Date% %Time% %Addr% %Str%
		>nul TimeOut /T %TWait%
	GoTo :Begin
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:55, 24-07-2022 | #27


Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Вот, сделал под свои нужды:

Код: Выделить весь код
@echo off
:ping
for /f "tokens=* skip=2" %%a in ('ping ya.ru -n 1 -4') do (
    echo %date% %time:~0,8% %%a>>c:\users\%username%\desktop\pingtime.txt
    timeout 1 >nul
    goto ping)
Но как к этому прикрутить кодировку из примера Foreigner, чтобы в блокноте кириллица отображалась?

Последний раз редактировалось Duber123, 24-07-2022 в 19:10.


Отправлено: 18:56, 24-07-2022 | #28


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Duber123, Если применить способ Foreigner к Вашему решению, то
Код: Выделить весь код
@echo off
>nul chcp 866
:Begin
	For /f "tokens=* skip=2" %%a in ('ping lenta.ru -n 1') Do Call :Out "%%date%% %%time:~0,8%% %%a"
	>nul timeout 3
GoTo :Begin
:Out
	>nul Chcp 1251
	>>"Z:\Soft_Out\ping1251.log" Echo %~1
	>nul chcp 866
Exit /B
Если к моему, то
Код: Выделить весь код
@Echo Off
cls
>nul chcp 866
	Set /A TWait=1
	Set "Addr=lenta.ru"
	Set "Log=Z:\Soft_Out\MyPing1251.log"

	:Begin
		Set "Str="
		FOR /F "usebackq delims=" %%p IN (`ping -n 5 %Addr%`) DO Set "Str=%%p"
		Call :Out "%Date% %Time% %Addr% %Str%"
		>nul TimeOut /T %TWait%
GoTo :Begin
:Out
	>nul Chcp 1251
	>>"%Log%" Echo %~1
	>nul chcp 866
Exit /B
Цитата Duber123:
Это немного не тот формат вывода »
По моему скромному мнению Ваш файл трудно читаем, у меня же выдаётся только итоговая строка, что удобнее для просмотра и анализа.
Общая проблема: окно CMD будет висеть черным пятном. Можно, конечно, применить VBS, чтобы его скрыть, а можно полностью переделать в VBS
Код: Выделить весь код
Dim Address: Address = "lenta.ru"
Dim LogFile: LogFile = "Z:\Soft_Out\PingVbs.log"
Dim WaitSek: WaitSek = 60

Dim Msg
With CreateObject("Scripting.FileSystemObject").OpenTextFile(LogFile, 8, True)
    Do
        With GetObject("winmgmts:").Get("Win32_PingStatus.Address='" + Address + "'")
            Msg = CStr(Now) + "  " + .Address + "  " + .ProtocolAddress + "  "
            If IsNull(.ResponseTime) Then
                Msg = Msg + "           ResponseTime= нет ответа" + "  "
            Else
                Msg = Msg + "ResponseTime=" + CStr(.ResponseTime) + "  "
                Msg = Msg + "TTL= " + CStr(.ResponseTimeToLive)
            End If
        End With
        .WriteLine Msg
        						'MsgBox Msg
        WScript.Sleep (WaitSek * 1000)
    Loop
End With
Убить скрипт можно из диспетчера задач (процесс WScript.exe)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-07-2022 в 08:29.


Отправлено: 08:23, 25-07-2022 | #29


Новый участник


Сообщения: 9
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата:
По моему скромному мнению Ваш файл трудно читаем.
Да, согласен, но так стало после добавления вашего кода.

Изначально же мой файл содержит классический вывод команды Ping + метка времени (открыт с помощью NotePad++):

Скрытый текст

25.07.2022 9:43:39 Ответ от 87.250.250.242: число байт=32 время=6мс TTL=248
25.07.2022 9:43:40 Ответ от 87.250.250.242: число байт=32 время=6мс TTL=248
25.07.2022 9:43:41 Ответ от 87.250.250.242: число байт=32 время=6мс TTL=248
25.07.2022 9:43:42 Ответ от 87.250.250.242: число байт=32 время=6мс TTL=248
25.07.2022 9:43:43 Ответ от 87.250.250.242: число байт=32 время=6мс TTL=248


Т.к. нужно решение именно на BAT-файле, возможно привести выводимую информацию именно к такому виду?

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

Последний раз редактировалось Duber123, 25-07-2022 в 10:40.


Отправлено: 10:02, 25-07-2022 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ping со временем и датой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Работа с датой, временем alexey_vf Скриптовые языки администрирования Windows 9 05-06-2013 04:52
Службы - что со временем в w-8 r-studio Microsoft Windows 8 и 8.1 3 03-01-2013 03:09
Разное - [решено] Проблема со временем oblomkrs Microsoft Windows 7 4 18-01-2012 14:59
Проблема со временем PLATON Непонятные проблемы с Железом 2 20-04-2008 15:35




 
Переход