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

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

Ответить
Настройки темы
CMD/BAT - Выполнение команд в бат в зависимости от времени запуска

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


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

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


Изменения
Автор: Sergey.l
Дата: 14-01-2018
Доброго времени суток!
Помогите дописать условия выполнения команд в зависимости от времени запуска бат
Например, есть вот такой код
Скрытый текст
Код: Выделить весь код
@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"

Echo %ddY%.%mmY%.%yyyyY% - Вчера
Echo %ddN%.%mmN%.%yyyyN% - Сегодня
Echo %ddT%.%mmT%.%yyyyT% - Завтра

==============================================================================================================
rem Выполняется с 08:00:00,00 до 23:59:59,99 (ДЕНЬ)
move /y "D:\Dipost\BOXES\Системный ящик\Удаленные\*.*" "D:\Dipost\BOXES\Системный ящик\%ddN%%mmN%\вход\"
move /y "D:\Dipost\BOXES\Системный ящик\Отправленные\*.*" "D:\Dipost\BOXES\Системный ящик\%ddN%%mmN%\отпр\"
move /y "D:\Dipost\BOXES\Системный ящик\Уведомления\*.*" "D:\Dipost\BOXES\Системный ящик\%ddN%%mmN%\увед\"

rem Выполняется с 00:00:00,00 до 07:59:59,99 (НОЧЬ)
move /y "D:\Dipost\BOXES\Системный ящик\Удаленные\*.*" "D:\Dipost\BOXES\Системный ящик\%ddY%%mmY%\вход\"
move /y "D:\Dipost\BOXES\системный ящик\Отправленные\*.*" "D:\Dipost\BOXES\Системный ящик\%ddY%%mmY%\отпр\"
move /y "D:\Dipost\BOXES\системный ящик\Уведомления\*.*" "D:\Dipost\BOXES\Системный ящик\%ddY%%mmY%\увед\"
==============================================================================================================

: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 вызов 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

pause

Задача состоит в том, чтобы в течении дня с 08:00:00,00 до 23:59:59,99 запускать батник в котором выполнялись команды move c переменными Сегодня "yyyyN" "mmN" "ddN" и перемещали письма в указанные папки с датой дежурства, например D:\Dipost\BOXES\Системный ящик\1401\
После полуночи с 00:00:00,00 до 07:59:59,99 дата меняется и требуется, чтобы в батнике выполнялись команды с переменными Вчера "yyyyY" "mmY" "ddY", перемещая письма в D:\Dipost\BOXES\Системный ящик\1401\

Просьба не советовать как можно это сделать в PowerShell, WSH и т.д. мне нужна помощь в указанном выше BAT

p.s. За батник с датой вчера-сегодня-завтра спасибо пользователю megaloman

Отправлено: 17:17, 14-01-2018

 

Ветеран


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

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


Цитата Sergey.l:
запускать ...»
не есть запустить. Через каждую минуту, час, несколько часов?
Вообще проще и правильнее делать это через планировщик, только в одно время с одними параметрами запуска в другое время с другими или разбить на два отдельных bat и запускать каждый в свое время.

Отправлено: 18:41, 14-01-2018 | #2



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

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


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


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

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


Мне не планировщик нужен. И не автоматизация процесса запуска, а зависимость когда я запускаю батник.
Я буду запускать по мере необходимости накопления писем, в течении рабочих суток.
Понятно, что проще два батника сделать, но задаю здесь вопрос, чтобы узнать есть ли возможность сделать все в одном
Задача состоит в том, чтобы в течении дня с 08:00:00,00 до 23:59:59,99 запускать батник в котором выполнялись команды move c переменными Сегодня "yyyyN" "mmN" "ddN" и перемещали письма в указанные папки с датой дежурства, например D:\Dipost\BOXES\Системный ящик\1401\
После полуночи с 00:00:00,00 до 07:59:59,99 дата меняется и требуется, чтобы в батнике выполнялись команды с переменными Вчера "yyyyY" "mmY" "ddY", перемещая письма в D:\Dipost\BOXES\Системный ящик\1401\
Цитата alpap:
Через каждую минуту, час, несколько часов? »

Отправлено: 19:01, 14-01-2018 | #3


Аватара для Elven

Ветеран


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

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


так и не понял суть задачи, но вроде нужно приблизительно вот это
Код: Выделить весь код
set Ntime=%time:~0,2%%time:~3,2%%time:~6,2% 
if %Ntime% lss 80000 (
REM код для 00:00:00 - 07:59:59 или переход на соответствующую метку
) else (
REM код для 08:00:00 - 23:59:59 или переход на соответствующую метку
)

Отправлено: 19:36, 14-01-2018 | #4


Ветеран


Contributor


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

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


Сотые доли секунды не рассматриваю - не за чем
Код: Выделить весь код
@Echo Off
cls

Set "Time11=080000" 
Set "Time12=235959"

Set "Time21=000000" 
Set "Time22=075959" 

Set "Out=D:\Dipost\BOXES\Системный ящик\1401" 

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmmss"
Call :FromNow 0 %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"
Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"

If 1%Time11% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time12% (
	Echo Move "TraLaLa\%yyyyN%\%mmN%\%ddN%\Маска_файлов" "%Out%\"
)

If 1%Time21% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time22% (
	Echo Move "TraLaLa\%yyyyY%\%mmY%\%ddY%\Маска_файлов" "%Out%\"
)

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,6%"
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
Интервалы нельзя указывать таким образом, чтобы он включал в себя полночь, например с 230000 до 070000

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


Отправлено: 21:18, 14-01-2018 | #5


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


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

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


Не затруднит написать код под любые команды? Скажем, напимер, если время 08:00-23:59 то выполняется 1, если 00:00-07:59 то 2

В таком виде
код
------
1
команды

2
команды
------
Код

Цитата megaloman:
Сотые доли секунды не рассматриваю - не за чем
Код: Выделить весь код
@Echo Off
cls

Set "Time11=080000" 
Set "Time12=235959"

Set "Time21=000000" 
Set "Time22=075959" 

Set "Out=D:\Dipost\BOXES\Системный ящик\1401" 

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmmss"
Call :FromNow 0 %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"
Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"

If 1%Time11% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time12% (
	Echo Move "TraLaLa\%yyyyN%\%mmN%\%ddN%\Маска_файлов" "%Out%\"
)

If 1%Time21% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time22% (
	Echo Move "TraLaLa\%yyyyY%\%mmY%\%ddY%\Маска_файлов" "%Out%\"
)

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,6%"
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
Интервалы нельзя указывать таким образом, чтобы он включал в себя полночь, например с 230000 до 070000

Отправлено: 00:54, 15-01-2018 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


У robocopy есть ключ /mon, который умеет следить за папкой, а также ключ /rh, регулирующий время запуска.
Там вообще много полезных параметров, почитайте:
Код: Выделить весь код
robocopy /?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 10:14, 15-01-2018 | #7


Ветеран


Contributor


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

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


Что Вас не пускает написать код под любые команды?
Цитата megaloman:
Код: Выделить весь код
If 1%Time11% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time12% (
	Echo Move "TraLaLa\%yyyyN%\%mmN%\%ddN%\Маска_файлов" "%Out%\"
)
If 1%Time21% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time22% (
	Echo Move "TraLaLa\%yyyyY%\%mmY%\%ddY%\Маска_файлов" "%Out%\"
)
»
Здесь можно прописать любые команды вместо Echo ........, в том числе и несколько строк.
Вообще-то лучше в таких ситуациях использовать подпрограммы, например:
Код: Выделить весь код
@Echo Off
cls

Set "Time11=080000" 
Set "Time12=235959"

Set "Time21=000000" 
Set "Time22=075959" 

Set "Out=D:\Dipost\BOXES\Системный ящик\1401" 

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmmss"

If 1%Time11% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time12% Call :Sub1
If 1%Time21% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time22%  Call :Sub2

pause
GoTo :Eof

:Sub1
	Call :FromNow 0 %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"
	Echo Сегодня %dd%.%mm%.%yyyy% Здесь любые команды для сегодня %dd% %mm% %yyyy% 
	Echo Например: Move "TraLaLa\%yyyyN%\%mmN%\%ddN%\Маска_файлов" "%Out%\"
GoTo :Eof

:Sub2
	Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"
	Echo Сегодня %dd%.%mm%.%yyyy% Здесь любые команды для вчера %ddY% %mmY% %yyyyY%
	Echo Например: Move "TraLaLa\%yyyyY%\%mmY%\%ddY%\Маска_файлов" "%Out%\"
GoTo :Eof
И далее по тексту подпрограммы из предыдущего поста
Не сообразил, что 1401 у Вас в пути скорее всего дата. Тогда надо так:
Код: Выделить весь код
@Echo Off
cls

Set "Time11=080000" 
Set "Time12=235959"

Set "Time21=000000" 
Set "Time22=075959" 

Set "Out=D:\Dipost\BOXES\Системный ящик" 

SetLocal EnableDelayedExpansion

Call :StrDate "yyyy" "mm" "dd" "hhmmss"

If 1%Time11% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time12% Call :Sub1
If 1%Time21% LEQ 1%hhmmss% If 1%hhmmss% LEQ 1%Time22%  Call :Sub2

pause
GoTo :Eof

:Sub1
	Call :FromNow 0 %dd%.%mm%.%yyyy% "yyyyN" "mmN" "ddN"
	Echo Сегодня %dd%.%mm%.%yyyy% Здесь любые команды для сегодня %dd% %mm% %yyyy% 
	Echo Например: Move "TraLaLa\%yyyyN%\%mmN%\%ddN%\Маска_файлов" "%Out%\%dd%%mm%\"
GoTo :Eof

:Sub2
	Call :FromNow -1 %dd%.%mm%.%yyyy% "yyyyY" "mmY" "ddY"
	Echo Сегодня %dd%.%mm%.%yyyy% Здесь любые команды для вчера %ddY% %mmY% %yyyyY%
	Echo Например: Move "TraLaLa\%yyyyY%\%mmY%\%ddY%\Маска_файлов" "%Out%\%ddY%%mmY%\"
GoTo :Eof

Старайтесь освоить средства CMD, если уж взялись ваять командные файлы, иначе каждая мелочь будет "в лом". "Код под любые команды" - нет такой команды в CMD

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


Последний раз редактировалось megaloman, 15-01-2018 в 11:13.

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

Отправлено: 10:54, 15-01-2018 | #8


Ветеран


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

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


Цитата Sergey.l:
Не затруднит написать код под любые команды? »
я в свое время специально написал утилиту экзешник на похожую тему.
BEFORE.EXE http://forum.oszone.net/post-2277704.html

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 00:15, 06-02-2018 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Выполнение команд без ожидания завершение предыдущих команд vngreez@vk Скриптовые языки администрирования Windows 8 31-03-2017 23:50
CMD/BAT - [решено] Выполнение блока команд после наступления определённого времени SANIOK_AV Скриптовые языки администрирования Windows 2 07-08-2012 14:42
CMD/BAT - [решено] Выполнение серии команд с заданной вероятностью запуска RedX Скриптовые языки администрирования Windows 0 21-06-2011 11:12
VBS/WSH/JS - удаление каталогов в зависимости от времени их модификации vasyakym12 Скриптовые языки администрирования Windows 0 21-03-2011 21:45
Регулировка макс. громкости в зависимости от времени суток. Oleg_SK Программное обеспечение Windows 1 02-05-2007 13:44




 
Переход