|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Прибавить время |
|
CMD/BAT - [решено] Прибавить время
|
Новый участник Сообщения: 2 |
Помогите пожалуста с решением проблемы, я уже мозг сломал, пока пытался скрипт написать. В общем, у меня есть файл со строчками, каждая из них начинается со времени, а дальше разная информация идет. Как получать время из строчки - я понял. Мне нужно прибавить ко времени в строчке 15 секунд, и не получается, хоть ты тресни. Если секунд меньше 39 - все нормально, а если больше - это получается надо прибавлять минуты, а если и минуты за 59 переваливают, то и часы. Начал писать условие if, но бросил, не осилил. Может кто поможет? Вот образец строчки, если что
13:01:26 Could not establish connection to Steam servers (steamclient2). |
|
Отправлено: 17:40, 02-12-2011 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Например вот это, примеры использования показаны, так что думаю, разберётесь. Время разбирается на HH MM SS через For, для использования в дальнейшем, вот так:
А это сами функции для работы со временем @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 ::======================================================================== |
Последний раз редактировалось Anonymоus, 15-10-2012 в 03:26. Отправлено: 18:05, 02-12-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Спасибо большое!
|
Отправлено: 19:49, 02-12-2011 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Anonymоus:
![]() |
|
Отправлено: 03:57, 03-12-2011 | #4 |
![]() Новый участник Сообщения: 10
|
Профиль | Отправить 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 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Цель-то какая? А то:
1. Тема 2011 года (некропостерство в решенных темах это такое себе) 2. Если известно время которое было добавлено не проще ли сразу вломить timeout на это же количество секунд? например 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 |
![]() Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата Elven:
он берет установленное время с лог файла с помощью этого кода что выше проверяет если прошло к примеру три часа, если да то запуск, если нет..., вот тут то мне и нужны эти секунды что бы он установил отсчёт до нужного мне времени. |
|
Отправлено: 19:39, 01-09-2020 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|