![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник формирующий дату вчера-сегодня-завтра для применения в командах |
|
|
CMD/BAT - [решено] Батник формирующий дату вчера-сегодня-завтра для применения в командах
|
Новый участник Сообщения: 41 |
Всем привет. Помогите дописать код даты завтрашнего дня в следующем батнике:
@echo off setlocal enabledelayedexpansion set d=%date:~0,2% set m=%date:~3,2% set y=%date:~6,4% if %d:~0,1%==0 set d=%d:~1% if %m:~0,1%==0 set m=%m:~1% set /a feb=y%%4 if %feb%==0 (set feb=29) else (set feb=28) set /a tok=m-1 if %tok%==0 set tok=12 for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do ( set /a d-=1 if !d!==0 ( set d=%%i set m=%tok% if !m!==12 set /a y-=1 ) ) set d=0%d% set m=0%m% set yesterday=%d:~-2%.%m:~-2%.%y% set today=%date:~0,2%.%date:~3,2%.%date:~6,4% set tomorrow= rem код даты завтрашнего дня? echo Вчера - %yesterday% echo Сегодня - %today% echo Завтра - %tomorrow% md "D:\%y%\%m%\%d%\" md "D:\%date:~6,4%\%date:~3,2%\%date:~0,2%\" md "D:\%tomorrow%\" rem код для создания папки с датой завтрашнего дня??? pause |
|
Отправлено: 13:07, 11-01-2018 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Sergey.l,
вам в прошлой вашей теме DJ Mogarych привел хороший пример для вчерашней, для завтрашней ничуть не сложнее (PowerShell): а если бы вы еще озвучили свою задачу (а если допустимо то и задумку) целиком, то может все по-другому и проще бы сделали. |
Отправлено: 13:50, 11-01-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Какое расширение у файла должно быть. Можете вместе с коммандами написать, которые указал выше. Мне нужно по маске с датой создавать папки, перемещать файлы (если в имени есть дата), копировать с добавлением даты в имя файла.
Например, создать папки в формате гггг/мм/дд Переместить файл ддмм_имя.doc Скопировать файл имя.doc в папку с добавлением даты ддмм_имя.doc А если не сложно, то помогите ДОПИСАТЬ в батник код завтрашней даты. В первом сообщении я все указал... Цитата alpap:
|
|
Последний раз редактировалось Sergey.l, 11-01-2018 в 14:51. Отправлено: 14:27, 11-01-2018 | #3 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Sergey.l, У меня ощущение, что моё решение Вы сочли бесполезным и не вчитывались.
Однако! Там приведена подпрограмма, которая пересчитывает даты на произвольное число дней как вперёд, так и назад.
@Echo Off cls SetLocal EnableDelayedExpansion Call :StrDate "yyyy" "mm" "dd" "hhmm" Set /A DeltaDay=0 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" Echo %yyyy% %mm% %dd% Сегодня Set /A DeltaDay=-1 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" Echo %yyyy% %mm% %dd% Вчера Set /A DeltaDay=1 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" Echo %yyyy% %mm% %dd% Завтра Set /A DeltaDay=7 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" Echo %yyyy% %mm% %dd% Через неделю Set /A DeltaDay=-61 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyy" "mm" "dd" Echo %yyyy% %mm% %dd% Два месяца тому назад pause GoTo :Eof :StrDate FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" Set "%~1=%@Tdate:~0,4%" Set "%~2=%@Tdate:~4,2%" Set "%~3=%@Tdate:~6,2%" Set "%~4=%@Tdate:~8,4%" GoTo :Eof :FromNow rem Пересчет даты на заданное кол-во дней rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd rem Заимствовано http://forum.oszone.net/thread-186889.html rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd" rem результат в перемменной %yyyy% %mm% %dd% SetLocal Set DT=%2 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%) GoTo :Eof |
------- Отправлено: 15:47, 11-01-2018 | #4 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Подскажите, а как мне разделить dd mm yyyy для разных команд в одном файле, если эти обозначения одинаковы для вчера, сегодня и завтра.
Цитата megaloman:
|
||
Отправлено: 17:45, 11-01-2018 | #5 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Sergey.l,
Цитата Sergey.l:
Не делать одинаковые обозначения. Например:
@Echo Off cls SetLocal EnableDelayedExpansion Call :StrDate "yyyy" "mm" "dd" "hhmm" Set /A DeltaDay=0 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN" Set /A DeltaDay=-1 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY" Set /A DeltaDay=1 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT" Set /A DeltaDay=7 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyW" "mmW" "ddW" Set /A DeltaDay=-61 Call :FromNow %DeltaDay% %dd%.%mm%.%yyyy% "yyyyM" "mmM" "ddM" Echo %yyyyN% %mmN% %ddN% Сегодня Echo %yyyyY% %mmY% %ddY% Вчера Echo %yyyyT% %mmT% %ddT% Завтра Echo %yyyyW% %mmW% %ddW% Через неделю Echo %yyyyM% %mmM% %ddM% Два месяца (61 день) тому назад pause GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 11-01-2018 в 20:57. Отправлено: 20:50, 11-01-2018 | #6 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Я извиняюсь, за свою некомпетентность, но можно вас попросить. Прислать полный код например с такими командами (я не пойму где их указать в вашем коде)
Это будет в батнике УТРО (пример) md d:\год\месяц\сегодня\ md d:\год\месяц\завтра\ сopy d:\шаблон.doc d:\год\месяц\сегодня\сегоднямесяц_шаблон.doc Это будет в батнике КОНЕЦ СМЕНЫ (пример) move d:\год\месяц\вчера\вчерамесяц_шаблон.doc d:\архив\год\месяц\вчера\ Я заметил по предыдущим темам, что вы не понимаете, зачем мне вчера-сегодня-завтра в одном батнике. Они в разных, но в некоторых есть по две даты. К содалению такой принцип работы. Чтобы вы поняли суть этой неразберихи, объясню принцип своей работы. Я прихожу на дежурство(смену) и запускаю например батник УТРО, при помощи него создаются рабочие папки, копируются шаблоны с добавлением текущей даты в формате ддмм_шаблон в нужные мне рабочие папки и т.д. В течении суток я работаю с файлами в папках, некоторые создаю макросами в эксель и ворд. Новые файлы также содержат дату. В конце смены, т.е. на следующий день, росле того как все распечатаю руководству, а у меня его много, я батником КОНЕЦ СМЕНЫ перемещаю файлы в папки с архивами, т.е. по маске даты "вчерашний день" команды находят файлы и переносят в папки-архив. И затем передаю дежурство другой смене и так 1/2 Папка с затрашним днем нужна для перемещения некоторых файлов для новой заступающей дежурной смены. 1. Могу я использовать в командах формат dd, т.е. переменные dd mm yyyy отдельно или только в формате dd.mm.yyyy, как у вас написано в коде? Т.к. иногда надо найти и переместить файл формата ddmm.doc 2. Куда именно вставлять команды в вашем коде? Пожалуйста, напишите код, если не сложно, с моими примерами команд указанными выше. Хочется облегчить рабочий процесс, т.к. в день сотни файлов, пачки бумаги и просто физически не успеваешь вручную все перекидывать. Проще указать команды, пути и нажав кнопку все выполнить за секунды. Цитата megaloman:
|
||
Последний раз редактировалось Sergey.l, 11-01-2018 в 21:54. Отправлено: 21:36, 11-01-2018 | #7 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Sergey.l,
например с такими командами
@Echo Off cls SetLocal EnableDelayedExpansion CHOICE /C 123 /M "1 - Утро, 2 - Конец смены, 3 - Выйти" If %ErrorLevel%==3 GoTo :Eof If %ErrorLevel%==1 Call :Morning If %ErrorLevel%==2 Call :EndDuty pause GoTo :Eof :Morning Call :StrDate "yyyy" "mm" "dd" "hhmm" Call :FromNow 1 %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT" 2>nul md "d:\%yyyy%\%mm%\%dd%" 2>nul md "d:\%yyyyT%\%mmT%\%ddT%" Copy "d:\шаблон.doc" "d:\%yyyy%\%mm%\%dd%\%mm%_шаблон.doc" GoTo :Eof :EndDuty Call :StrDate "yyyy" "mm" "dd" "hhmm" Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY" 2>nul Md "d:\архив\%yyyyY%\%mmY%\%ddY%" move /Y "d:\%yyyyY%\%mmY%\%ddY%\%mmY%_шаблон.doc" "d:\архив\%yyyyY%\%mmY%\%ddY%\" GoTo :Eof :StrDate FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" Set "%~1=%@Tdate:~0,4%" Set "%~2=%@Tdate:~4,2%" Set "%~3=%@Tdate:~6,2%" Set "%~4=%@Tdate:~8,4%" GoTo :Eof :FromNow rem Пересчет даты на заданное кол-во дней rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd rem Заимствовано http://forum.oszone.net/thread-186889.html rem вызов Call :FromNow %DeltaDay% %Date% "yyyy" "mm" "dd" rem результат в перемменной %yyyy% %mm% %dd% SetLocal Set DT=%2 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal &(Set %~3=%yyyy%&Set %~4=%mm:~-2%&Set %~5=%dd:~-2%) GoTo :Eof %yyyyY% %mmY% %ddY% Это Год Месяц День вчера %yyyyT% %mmT% %ddT% Это Год Месяц День завтра Вы получили переменные Год Месяц День, используйте их так, как Вам нужно в любой комбинации. Например, если сегодня 11 января 2018года, то: %yyyy%-%mm%-%dd% даст значение 2018-01-11 %dd%.%mm%.%yyyy% даст значение 11.01.2018 При вызове подпрограммы Call :StrDate "yyyy" "mm" "dd" "hhmm" получим сегодняшние %yyyy% %mm% %dd% Переменные можно обозвать и иначе, лишь бы было соответствие "yyyy" "mm" "dd" --> %yyyy% %mm% %dd% Call :FromNow 1 %dd%.%mm%.%yyyy% "yyyyT" "mmT" "ddT" По сегодняшней дате %dd%.%mm%.%yyyy% (то есть 11.01.2018) Получаем дату "завтра" (1 день вперёд от сегодня) %yyyyT% %mmT% %ddT% (то есть соответственно значения 2018 01 12) |
------- Последний раз редактировалось megaloman, 11-01-2018 в 23:11. Отправлено: 23:03, 11-01-2018 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Sergey.l,
имхо (относительно вашего описанного в #7) дать сменам номера (ники, ...) и именовать ими папки передачи с добавлением даты передачи и не морочить голову ни себе ни людям. |
Отправлено: 23:16, 11-01-2018 | #9 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Адаптировал ваш батник под свои команды. Просто идеально. Огромнейшее спасибо. Век буду помнить!
p.s. для справки. Когда тестировал батник не на рабочем компе, он выдал ошибку(см.вложение). С чем может быть связано? (ДЧ-это имя компьютера) А на рабочем все идеально, отработал как часы👍 Цитата megaloman:
|
|
Отправлено: 05:57, 12-01-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
HDD - Чет с моим HHD, вчера зависал, сегодня работает на 100% мощности и выдает 1мб/сек | Fox210897 | Накопители (SSD, HDD, USB Flash) | 3 | 31-05-2017 19:12 | |
CMD/BAT - Копирование (сегодня) папки и его содержимого, если папка появилась только (вчера) | tokkz | Скриптовые языки администрирования Windows | 0 | 25-11-2015 15:36 | |
CMD/BAT - CMD проверка создания файла за (сегодня вчера) с созданием флагового файла | yamixon | Скриптовые языки администрирования Windows | 5 | 17-03-2015 08:40 | |
IGZO выходит на рынок: сегодня iPad Air, завтра мониторы и телевизоры | OSZone News | Новости железа | 0 | 18-11-2013 07:30 | |
ThinkPad вчера и сегодня. Lenovo VS IBM | treehel | Ноутбуки | 4 | 09-11-2008 11:37 |
|