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

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

Ответить
Настройки темы
CMD/BAT - [решено] Нумерация строк в cmd

Пользователь


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

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


Подскажите, можно ли сделать так, чтобы cmd автоматически нумеровал строки? Например, я задаю ping google.com -t и чтобы вместо стандартного:
Код: Выделить весь код
Обмен пакетами с google.com [74.125.39.104] с 32 байтами данных:
Ответ от 74.125.39.104: число байт=32 время=88мс TTL=54
Ответ от 74.125.39.104: число байт=32 время=75мс TTL=54
Ответ от 74.125.39.104: число байт=32 время=73мс TTL=54
Ответ от 74.125.39.104: число байт=32 время=74мс TTL=54
Выдавалось:
Код: Выделить весь код
Обмен пакетами с google.com [74.125.39.104] с 32 байтами данных:
1. Ответ от 74.125.39.104: число байт=32 время=88мс TTL=54
2. Ответ от 74.125.39.104: число байт=32 время=75мс TTL=54
3. Ответ от 74.125.39.104: число байт=32 время=73мс TTL=54
4. Ответ от 74.125.39.104: число байт=32 время=74мс TTL=54
Или для этого надо использовать какую-то альтернативную консоль сторонних производителей?

Отправлено: 12:31, 03-08-2011

 

Пользователь


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

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


Цитата Anonymоus:
Вот мое решение, думаю, Вам подойдет. Скрипт периодически (с настраиваемым интервалом, по умолчанию - 15 сек) пингует выбранный хост, отображает статистику - сколько раз смог удачно пропинговать, сколько раз сайт был недоступен, и при любой смене статуса хоста записывает это событие в лог. В логе вы увидите примерно такое:
Код:
Started at [04.08.2011 - 2:39:06]
04.08.2011 - 2:39:20 >> 127.0.0.1 is active
Started at [04.08.2011 - 2:39:46]
04.08.2011 - 2:40:01 >> google.ru is active
04.08.2011 - 2:40:43 >> google.ru is offline
04.08.2011 - 2:41:59 >> google.ru is active
Сам скрипт:
Код:
@Echo Off
:: Anonymous, 2011
Cls
Title Ping2Host
:: Ведение лога
Set Logging=true
:: Таймаут в секундах
Set Timeout=15
Echo.
Set /P Host= Enter IP or hostname: ^>
Cls&Set Total=0&Set Succes=0&Set Fail=0&Set Status=Not checked yet&Set StartTime=[%date% - %time:~-0,8%]
Set /A Sleep=(Timeout-1)*1000
If %Logging%==true (Set LogFile="%~n0.log") Else (Set LogFile=nul)
Echo.>>%LogFile%&Echo Started at %StartTime%>>%LogFile%
:ShowStats
Call :Stats
.\bin\nc.exe wait %Sleep%
Ping -n 1 -w 1000 -l 1024 %Host%>nul
If %ErrorLevel% GTR 0 (
Set /A Fail+=1
If Not "%Status%"=="Offline" (Echo %date% - %time:~-0,8% ^>^> %Host% is offline>>%LogFile%)
Set Status=Offline
Title Offline [%Host%] - Ping2Host
) Else (
Set /A Succes+=1
If Not "%Status%"=="Online" (Echo %date% - %time:~-0,8% ^>^> %Host% is active>>%LogFile%)
Set Status=Online
Title Online [%Host%] - Ping2Host
)
GoTo ShowStats
:Stats
Cls
Echo.
Echo Started at: %StartTime%
Echo.
Echo Target: %Host%
Echo Online: %Succes% times, Offline: %Fail% times
Echo Current status: [%date% - %time:~-0,8%] - %Status%
Echo.
Exit /B
Для его правильной работы нужно скачать NirCmd (консольная версия), переименовать exe-файл в nc.exe, создать рядом со скриптом директорию bin и положить туда nc.exe. »
скрипт тоже отличный, только вот потестил я его около часа, нашел один недостаток: файлик обновляет при первом запуске скрипта строчкой:
Код: Выделить весь код
04.08.2011 - 10:32:56 >> google.com is active
И на этом все, даже после принудительного завершения срипта через ctrl+c файлик не обновляется. Обновление происходит только во время разрыва связи. Оно конечно и понятно с одной стороны: зачем захламлять лог-файл лишними записями. Но было бы удобно, чтобы логи писались хотя бы при выходе из скрипта, что-то типа:
Код: Выделить весь код
04.08.2011 - 10:32:56 >> google.com is active
***тут я завершаю работу скрипта***
04.08.2011 - 10:55:51 >> google.com is active
Цитата Dzirt2005:
Вариант с внешней программой не устраивает? Например, с mtee : »
да внешняя программулина не проблема. Скачал этот mtee. чет не пойму как он работает. Его надо в директорию виндоус кинуть рядом с cmd?

Отправлено: 10:55, 04-08-2011 | #11



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

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


Ветеран


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

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


Цитата werov:
да внешняя программулина не проблема. Скачал этот mtee. чет не пойму как он работает. Его надо в директорию виндоус кинуть рядом с cmd? »
В любой каталог, прописанный в переменной PATH (можешь и в %SystemRoot%\System32). Если нужно чтобы и в лог-файл писалось, то вызов будет такой:
Код: Выделить весь код
ping -t google.com | mtee /d /t /+ result.log
В файл result.log будет писаться все то, что выводится на экран

Последний раз редактировалось Dzirt2005, 04-08-2011 в 11:28.


Отправлено: 11:19, 04-08-2011 | #12


Ветеран


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

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


Цитата werov:
Из cmd напрямую:
Код:
S:\>@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('ping google.com') do echo !date! !time!: %%i
Непредвиденное появление: %%i. »
Ну так зачем все это вставлять в окошко cmd??!! Создай батник и запускай:
Код: Выделить весь код
S:\> batfile.cmd

Отправлено: 12:21, 04-08-2011 | #13


Старожил


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

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


Цитата werov:
И на этом все, даже после принудительного завершения срипта через ctrl+c файлик не обновляется. Обновление происходит только во время разрыва связи. Оно конечно и понятно с одной стороны: зачем захламлять лог-файл лишними записями. Но было бы удобно, чтобы логи писались хотя бы при выходе из скрипта, что-то типа: »
Дополнил скрипт. Для корректного выхода (с сохранением времени выхода в лог и текущего статуса на тот момент) создайте рядом со скриптом файл stop.txt.

Пример лога:
Код: Выделить весь код
Started at [04.08.2011 - 16:54:18]
04.08.2011 - 16:54:32 >> 192.168.50.5 is active
Closed at [04.08.2011 - 16:55:42], last status: Online
Скрипт:
Код: Выделить весь код
@Echo Off
:: Anonymous, 2011
Cls
Title Ping2Host

:: Ведение лога
Set Logging=true
:: Таймаут в секундах
Set Timeout=15

Echo.
Set /P Host=  Enter IP or hostname: ^> 
Cls&Set Total=0&Set Succes=0&Set Fail=0&Set Status=Not checked yet&Set StartTime=[%date% - %time:~-0,8%]
Set /A Sleep=(Timeout-1)*1000
If %Logging%==true (Set LogFile="%~n0.log") Else (Set LogFile=nul)
Echo.>>%LogFile%&Echo Started at %StartTime%>>%LogFile%
:ShowStats
Call :Stats
.\bin\nc.exe wait %Sleep%
Ping -n 1 -w 1000 -l 1024 %Host%>nul
If %ErrorLevel% GTR 0 (
Set /A Fail+=1
If Not "%Status%"=="Offline" (Echo %date% - %time:~-0,8% ^>^> %Host% is offline>>%LogFile%)
Set Status=Offline
Title Offline [%Host%] - Ping2Host
) Else (
Set /A Succes+=1
If Not "%Status%"=="Online" (Echo %date% - %time:~-0,8% ^>^> %Host% is active>>%LogFile%)
Set Status=Online
Title Online [%Host%] - Ping2Host
)
If Exist stop.txt (
Echo Closed at [%date% - %time:~-0,8%], last status: %Status%>>%LogFile%
Exit
)
GoTo ShowStats

:Stats
Cls
Echo.
Echo  Started at: %StartTime%
Echo.
Echo  Target: %Host%
Echo  Online: %Succes% times, Offline: %Fail% times
Echo  Current status: [%date% - %time:~-0,8%] - %Status%
Echo.
Exit /B
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:57, 04-08-2011 | #14


Старожил


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

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


Цитата werov:
Хотелось бы, чтобы пинги шли каждую секунду, как при стандартной команде ping. А так скрипт, как раз то что надо »
В моём варианте 1 сек. собственно пинг — 59 сек. пауза;
Удали\закомментируй ping -n 59 localhost >nul и будет тебе счастье.
После запятой действительно сотые

Отправлено: 20:23, 04-08-2011 | #15


Пользователь


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

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


Цитата:
Дополнил скрипт. Для корректного выхода (с сохранением времени выхода в лог и текущего статуса на тот момент) создайте рядом со скриптом файл stop.txt.
обновил скрипт, создал рядом с файлом 1.bat файлик stop.txt. Запускаю скрипт, прописываю google.com, проходит 15 сек, консольное окно закрывается, файл 1.log обновляется с такой записью:
Код: Выделить весь код
Started at [05.08.2011 - 10:06:28]
05.08.2011 - 10:06:42 >> google.com is active
Closed at [05.08.2011 - 10:06:42], last status: Online
Далее снова запускаю скрипт, задаю google.com -t, на экране консольного окна появляется:
Код: Выделить весь код
Started at: [05.08.2011 - 10:11:21]

Target: google.com -t
Online: 0 times, Offline: 0 times
Current status: [05.08.2011 - 10:11:21] - Not checked yet
И висит таким образом пока не закроешь консольное окно. В лог файле появляется запись:
Код: Выделить весь код
Started at [05.08.2011 - 10:11:21]
И все...

Т.е. проблема в том, что при наборе google.com срабатывает стандартная команда пинг гугл.ком, без параметра -t, как это работало в предыдущей версии скрипта. А если жестко руками прописать google.com -t, тогда скрипт отказывается работать

З.Ы. удалил файл stop.txt скрипт снова стал работать нормально. Как только создал файл заново, скрипт автоматически сам вылетает после первых удачных 15 секунд

Отправлено: 10:17, 05-08-2011 | #16


Старожил


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

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


werov, зачем вы приписываете ключ -t к адресу? Скрипт и без этого будет работать до того момента, как вы не прекратите его работу. Файл stop.txt нужно создавать только тогда, когда хотите выключить скрипт, чтобы он корректно отработал выключение с записью в лог.

Отправлено: 16:11, 05-08-2011 | #17


Пользователь


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

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


а ну так с этого и надо было начинать, что файл stop.txt надо создать непосредственно перед отключением скрипта. Тогда все ясно. Спасибо! Очень выручил

Отправлено: 16:26, 05-08-2011 | #18


Пользователь


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

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


Anonymоus
И еще одна маленькая просьба. Можно сделать так, чтобы при открытии батника не надо было вводить google.com, а сразу же после запуска начинались пинги? Т.е. чтобы какой сайт пинговать можно было править в самом батнике

Отправлено: 10:13, 08-08-2011 | #19


Старожил


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

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


werov, держите, адрес выделен жирным:

Код: Выделить весь код
@Echo Off
:: Anonymous, 2011
Cls
Title Ping2Host

:: Ведение лога
Set Logging=true
:: Таймаут в секундах
Set Timeout=15
:: Адрес
Set Host=google.com


Set Total=0&Set Succes=0&Set Fail=0&Set Status=Not checked yet&Set StartTime=[%date% - %time:~-0,8%]
Set /A Sleep=(Timeout-1)*1000
If %Logging%==true (Set LogFile="%~n0.log") Else (Set LogFile=nul)
Echo.>>%LogFile%&Echo Started at %StartTime%>>%LogFile%
:ShowStats
Call :Stats
.\bin\nc.exe wait %Sleep%
Ping -n 1 -w 1000 -l 1024 %Host%>nul
If %ErrorLevel% GTR 0 (
Set /A Fail+=1
If Not "%Status%"=="Offline" (Echo %date% - %time:~-0,8% ^>^> %Host% is offline>>%LogFile%)
Set Status=Offline
Title Offline [%Host%] - Ping2Host
) Else (
Set /A Succes+=1
If Not "%Status%"=="Online" (Echo %date% - %time:~-0,8% ^>^> %Host% is active>>%LogFile%)
Set Status=Online
Title Online [%Host%] - Ping2Host
)
If Exist stop.txt (
Echo Closed at [%date% - %time:~-0,8%], last status: %Status%>>%LogFile%
Exit
)
GoTo ShowStats

:Stats
Cls
Echo.
Echo  Started at: %StartTime%
Echo.
Echo  Target: %Host%
Echo  Online: %Succes% times, Offline: %Fail% times
Echo  Current status: [%date% - %time:~-0,8%] - %Status%
Echo.
Exit /B
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 08-08-2011 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Нумерация внутри строки ImRight AutoIt 2 13-03-2011 16:39
2010 - [решено] Нумерация страниц Kathandra Microsoft Office (Word, Excel, Outlook и т.д.) 7 30-09-2010 20:16
Установка - Нумерация жёстких дисков twinzzz75 Microsoft Windows 2000/XP 7 12-07-2010 16:09
2007 - Нумерация Streamnewal Microsoft Office (Word, Excel, Outlook и т.д.) 2 14-06-2010 20:58
Помогите пожалуйста не срабатывает команда из*cmd файла запускаемого из RanOnceEx.cmd vovchiku Автоматическая установка Windows 2000/XP/2003 6 25-09-2007 23:38




 
Переход