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

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

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

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


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

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


Помогите пожалуста с решением проблемы, я уже мозг сломал, пока пытался скрипт написать. В общем, у меня есть файл со строчками, каждая из них начинается со времени, а дальше разная информация идет. Как получать время из строчки - я понял. Мне нужно прибавить ко времени в строчке 15 секунд, и не получается, хоть ты тресни. Если секунд меньше 39 - все нормально, а если больше - это получается надо прибавлять минуты, а если и минуты за 59 переваливают, то и часы. Начал писать условие if, но бросил, не осилил. Может кто поможет? Вот образец строчки, если что
13:01:26 Could not establish connection to Steam servers (steamclient2).

Отправлено: 17:40, 02-12-2011

 

Старожил


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

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


Например вот это, примеры использования показаны, так что думаю, разберётесь. Время разбирается на HH MM SS через For, для использования в дальнейшем, вот так:
Код: Выделить весь код
For /F "tokens=1,2,3 delims=:" %%A In ("13:01:26") Do (
Set HH=%%A
Set MM=%%B
Set SS=%%C
)
А это сами функции для работы со временем
Код: Выделить весь код
@Echo Off

:: Устанавливаем время
Set HH=23
Set MM=15
Set SS=00

:: Демонстрация работы
:: ===================================
Echo Time                  = [%HH%:%MM%:%SS%]
Call :SerializeTime
Set TmpTime=%ErrorLevel%
Echo Serialized time       =  %TmpTime%
Call :DeserializeTime %TmpTime%
Echo Deserialized time     = [%DHH%:%DMM%:%DSS%]
Call :TMinus %TmpTime% 9014
Call :DeserializeTime %ErrorLevel%
Echo Time - 2:30:14        = [%DHH%:%DMM%:%DSS%]
Call :TPlus %TmpTime% 9014
Call :DeserializeTime %ErrorLevel%
Echo Time + 2:30:14        = [%DHH%:%DMM%:%DSS%]
Pause&Exit
:: ===================================

::===Функции работы со временем в .bat====================================
:: Anonymous, 2010
:: v 1.3
:ParseTimestamp
:: Разбирает на составляющие временную метку формата ЧЧ:ММ:СС
:: Формат:   Call :ParseTimestamp (время)
:: К примеру - Call :ParseTimestamp %time:~-0,8%
:: Вывод - в переменные HH MM и SS
For /F "tokens=1,2,3 delims=:" %%A In ("%1") Do (
    Set HH=%%A
    Set MM=%%B
    Set SS=%%C
)

:SerializeTime
:: Сериализует время из переменных HH MM и SS
:: Вывод - в ErrorLevel
Call :Cut %HH% HH&Call :Cut %MM% MM&Call :Cut %SS% SS
Set /A STime=(HH*60*60)+(MM*60)+SS
Exit /B %STime%

:DeserializeTime
:: Десериализует время, приводит его к стандартному формату
:: Формат:   Call :DeserializeTime (сериализованное время)
:: Вывод - в переменные DHH DMM и DSS
Set DHH=00&Set DMM=00&Set DSS=00
Set /A DHH=%1/60/60
Set /A DMM=(%1/60)-(DHH*60)
Set /A DSS=%1-(DHH*60*60)-(DMM*60)
If %DHH%==24 Set DHH=00
If %DHH% LSS 10 Set DHH=0%DHH%
If %DMM% LSS 10 Set DMM=0%DMM%
If %DSS% LSS 10 Set DSS=0%DSS%
Exit /B

:TMinus
:: Функция вычитания для сериализованного времени
:: Формат:   Call :TMinus (сериализованное время) (сколько секунд отнять)
:: Вывод - в ErrorLevel
Set Result=
Set /A Result=%1-%2
If %2 GTR %1 (
    Set /A Result=86400+%1-%2
)
Exit /B %Result%

:TPlus
:: Функция прибавления для сериализованного времени
:: Формат:   Call :TPlus (сериализованное время) (сколько секунд прибавить)
:: Вывод - в ErrorLevel
Set Result=
Set /A Result=%1+%2
If %Result% GTR 86400 (
    Set /A Result=%1+%2-86400
)
Exit /B %Result%

:Timer
:: Отсчитывает прошедшее с заданного момента время
:: Формат:   Call :Timer (запомненное сериализованное время)
:: Вывод - в ErrorLevel
:: Если счетчик переходит границу суток, число дней возрастает на 1
:: Дни выводятся в переменную ED (и накапливаются) // да, знаю, что костыль и быдлокод
Set OTime=%1
If "%ED%"=="" Set ED=0
Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Set CTime=%STime%
If %OTime% GTR %CTime% (
    Set /A Timer=86400-%OTime%+%CTime%
    Set /A ED+=1
) Else (
    Set /A Timer=CTime-OTime
)
Exit /B %Timer%

:Timer2
:: Проверяет, прошел ли заданный промежуток времени
:: Формат:   Call :Timer2 (запомненное сериализованное время) (промежуток в секундах)
:: Вывод - в ErrorLevel (только 0=промежуток истёк или 1=промежуток ещё не истёк)
Call :ParseTimestamp %time:~-0,8%
Call :SerializeTime
Call :TMinus %STime% %1
If %2 GTR %Result% Set Timer2=1&Exit /B 1
Set Timer2=0&Exit /B 0

:Cut
:: Убирание ведущих нулей и пробелов
:: Формат:   Call :Cut (Двухзначное число) (Переменная, куда вывести резуьтат)
Set d=%1
If "%d:~,1%"=="0" Set %2=%d:~1%
If "%d:~,1%"==" " Set %2=%d:~1%
Exit /B
::========================================================================
А если не секрет, в чем сакральный смысл прибавления 15 секунд к времени из логов (судя по "Steam" - игры)?

Последний раз редактировалось Anonymоus, 15-10-2012 в 03:26.

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

Отправлено: 18:05, 02-12-2011 | #2



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

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


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


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

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


Спасибо большое!

Отправлено: 19:49, 02-12-2011 | #3


Ветеран


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

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


Цитата Anonymоus:
А если не секрет, в чем сакральный смысл прибавления 15 секунд к времени из логов (судя по "Steam" - игры)? »
Тсс! Мальчиш-Кибальчиш такие тайны не выдаёт .

Отправлено: 03:57, 03-12-2011 | #4


Аватара для ARMAGIDON

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


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

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


Цитата Anonymоus:
так что думаю, разберётесь. »
Привет, а можно в этот код добавить текущее время и вывод остатка в секундах ?
например сейчас
10:30
мы установили время
9:30
батник прибавил три часа это
12:30
вот нужно узнать время в секундах между текущем, а именно 10:30 и будущем 12:30

Я что то пробовал вывести, но больше запутался

Последний раз редактировалось ARMAGIDON, 04-09-2020 в 12:25. Причина: Сам допёр..


Отправлено: 13:48, 01-09-2020 | #5


Аватара для Elven

Ветеран


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

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


Цель-то какая? А то:
1. Тема 2011 года (некропостерство в решенных темах это такое себе)
2. Если известно время которое было добавлено не проще ли сразу вломить timeout на это же количество секунд?
например
Код: Выделить весь код
timeout 15
3. Решать проблемы со временем на cmd когда есть куда как более удобный powershell опять же так себе вариант.
4. Даже если уперлись в cmd, то есть способы получения текущего времени гораздо более надежные чем потрошение %date% (несколько раз меня это дело здорово подводило из-за разных региональных настроек, посему пользую другой вариант)
вот этот
Код: Выделить весь код
@echo off
for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year,Hour,Minute,Second /value|find "^=""') do set "%%a=0%%b"
set Year=%Year:~-5%
set Month=%Month:~-3%
set Day=%Day:~-3%
set Hour=%Hour:~-3%
set Minute=%Minute:~-3%
set Second=%Second:~-3%
echo %Year%.%Month%.%Day% - %Hour%:%Minute%:%Second%
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:04, 01-09-2020 | #6


Аватара для ARMAGIDON

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


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

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


Цитата Elven:
Цель-то какая? »
так для этого и нужно, если от установленного времени не про шло к примеру два часа то что бы мой батник ставил timeout этих секунд , дальше как пройдут он запустит что надо.
он берет установленное время с лог файла с помощью этого кода что выше проверяет если прошло к примеру три часа, если да то запуск, если нет..., вот тут то мне и нужны эти секунды что бы он установил отсчёт до нужного мне времени.

Отправлено: 19:39, 01-09-2020 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
http/web - Не зайти на google.com или youtube.com все время выдает “Во время загрузки страницы с metonol Сетевые технологии 1 18-03-2019 20:09
Прочие - Как к разделу, созданному в VHD, прибавить неразмеченное пространство? Celsus Программное обеспечение Windows 1 22-11-2011 21:54
Разное - [решено] В время от время открывается окно cmd и тутже уничтожается. Patrig78 Microsoft Windows 7 16 31-08-2011 14:19
Прибавить к дате месяц с учетом количества дней в месяце binders Вебмастеру 3 16-06-2010 04:39
Мультимедиа - Тихо, нужно прибавить звук Ruslik Программное обеспечение Windows 4 23-10-2008 09:13




 
Переход