Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - Сделать действия, если интервал времени

Ветеран


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

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


Здравствуйте, есть код, который ждет определенное количество минут (которые определяет по имени файла), после чего удаляет и копирует файлы (действия выделены жирным).

Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "C:\settings and files\options\sleep - *."`) do set /a iDelay = %%i * 60 - 1

if defined iDelay (
	>nul ping.exe -n %iDelay% 127.0.0.1
	del "C:\settings and files\limit\work limit - *."
        copy "C:\settings and files\options\work limit - *." "C:\settings and files\limit\"
)

endlocal
exit /b 0
Можно ли в данный код добавить еще одно условие, которое будет заключаться вот в чем:
После окончания задержки, действия "копировать - удалить - завершить работу скрипта", должны выполняться только в нужный интервал времени... если текущее время не входит в нужный интервал, то стартует все заново.. т.е. опять включается задержка (которая опять определяется по имени того же файла), ну и после окончания задержки опять проверяет интервал времени...
Также нужный интервал времени должен быть не фиксированным, а также считываться с имени файлов.. файлы будут без расширений.. их будет два, от скольки часов и до скольки часов.
к примеру имена файлов:
"ot - 2"
"do - 8"
это значит, что нужный интервал от 2:00 до 8:00 утра.

Отправлено: 23:17, 10-07-2018

 

Ветеран


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

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


Alexander_88, вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться. Зачем сие было решено делать именно так, а не как у людей — например, в виде банально-древнего ini-файла или новомодного xml/json-файла?
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:23, 10-07-2018 | #2



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

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


Ветеран


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

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


Да если б я знал как это сделать.. ведь по простому для себя делаю)
эти файлы я переименую с помощью других батников, батники запускаются через делфи, кнопками.. как бы такая панель управления

Отправлено: 00:13, 11-07-2018 | #3


Ветеран


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

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


Если делаете что-то на Delphi — зачем Вам вообще пакетные файлы? Пишите уж всё на Delphi.

Цитата Alexander_88:
Да если б я знал как это сделать.. ведь по простому для себя делаю) »
Например, так:
Скрытый текст

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

Отправлено: 00:54, 11-07-2018 | #4


Ветеран


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

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


Alexander_88,
я для подобных целей 100 лет назад написал утилитку before
http://forum.oszone.net/post-2277704.html

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

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

Отправлено: 09:42, 11-07-2018 | #5


Ветеран


Contributor


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

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


Цитата Iska:
вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться »
Alexander_88, Как-то всё извращенно-мудрено
Если всё-таки очень хочется, переделал Ваш код
Код: Выделить весь код
@Echo Off

Set "dFrom=C:\settings and files\options"
Set "dTo=C:\settings and files\limit"
Set "fName=work limit - *."

Set "fSleep=sleep - *."
Set "fBeg=ot - *."
Set "fEnd=do - *."

Set /A tBeg=100
Set /A tEnd=124

Set /A iDelay=-1
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fSleep%"`) Do Set /A iDelay = %%i * 60

If %iDelay% LSS 0 Exit /b 1
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fBeg%"`) Do Set /A tBeg = %%i + 100
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fEnd%"`) Do Set /A tEnd = %%i + 100

:Begin
	>nul ping.exe -n %iDelay% 127.0.0.1
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "tNow=%%d"
	Set /A tNow=1%tNow:~8,2%
		rem Echo %tBeg%   %tEnd%   %tNow%   %Time%
        If %tNow% LSS %tBeg% GoTo :Begin
        If %tNow% GEQ %tEnd% Exit /B 0
	2>nul Del "%dTo%\%fName%"
	>nul Copy "%dFrom%\%fName%" "%dTo%\"
Exit /B 0
Если при запуске батника файла с именем задержки нет, ничего не делается, батник завершается
По умолчанию, если нет файлов "ot - *." и "do - *." батник однократно исполнит прописанные действия.
Если текущее время меньше указанного в "ot - *.", батник циклически будет с задержкой опрашивать текущее время до тех пор, пока оно не станет >= в имени файла "ot - *."
Если при запуске батника в файле с именем "do - *." указано время менее текущего, ничего не делается, батник завершается

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


Последний раз редактировалось megaloman, 13-07-2018 в 17:03.

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

Отправлено: 16:29, 11-07-2018 | #6


Ветеран


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

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


Спасибо всем за ответы...

Теперь вот так:

Код: Выделить весь код
@Echo Off

Set "dFrom=C:\settings and files\options"
Set "dTo=C:\settings and files\limit"
Set "fName=C:\settings and files\options\work limit - *."

Set "fSleep=C:\settings and files\options\sleep - *."
Set "fBeg=C:\settings and files\options\ot - *."
Set "fEnd=C:\settings and files\options\do - *."

Set /A tBeg=100
Set /A tEnd=124

Set /A iDelay=-1
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fSleep%"`) Do Set /A iDelay = %%i * 60

If %iDelay% LSS 0 Exit /b 1
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fBeg%"`) Do Set /A tBeg = %%i + 100
For /f "usebackq tokens=2 delims=- " %%i in (`2^>nul dir /b /a:-d "%dFrom%\%fEnd%"`) Do Set /A tEnd = %%i + 100

:Begin
	>nul ping.exe -n %iDelay% 127.0.0.1
	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "tNow=%%d"
	Set /A tNow=1%tNow:~8,2%
		rem Echo %tBeg%   %tEnd%   %tNow%   %Time%
        If %tNow% LSS %tBeg% GoTo :Begin
        If %tNow% GTR %tEnd% Exit /B 0
	2>nul Del "%dTo%\%fName%"
	>nul Copy "%dFrom%\%fName%" "%dTo%\"
Exit /B 0
есть файлы "sleep - 1" "ot - 0" "do - 3" (получается интервал с 0 до 3 часов.... задержка 1 минута)
время 1:04
батник появляется и исчезает.. даже не выполняет задержку sleep, файлы вроде не копирует, проверил. Продовал также сменить интервал с "ot - 1", "do - 3".. то же самое... может что - то не то делаю?

1 Нужно сначала выполнить задержку sleep, потом пункт 2
2 если текущее время в интервале ot do часов.. то выполнить действия и завершиться.......... если не в текущем интервале, то начать с пункта 1.

Цитата:
Если текущее время меньше указанного в "ot - *.", батник циклически будет с задержкой опрашивать текущее время до тех пор, пока оно не станет >= в имени файла "ot - *."
Если при запуске батника в файле с именем "do - *." указано время менее текущего, ничего не делается, батник завершается
а это не одно и то же?
если от 0 до 3
текущее время например 6... получается текущее время и больше до и меньше от... т.е. под два условия попадает?

у меня по идее на примере время меньше "ot - *", значит батник не должен просто завершаться?

Отправлено: 23:26, 11-07-2018 | #7


Ветеран


Contributor


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

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


Alexander_88, обратите внимание, имена файлов указываются без путей.
Код: Выделить весь код
Set "fName=work limit - *."
Set "fSleep=sleep - *."
Set "fBeg=ot - *."
Set "fEnd=do - *."
Пути к папкам указаны выше.
Естественно что батник при Ваших описаниях не находит файл sleep и завершается.
Для отладки можете убрать rem перед echo. При этом полУчите время (часы + 100) из файлов ot, do (если они существуют в указанной папке, иначе будет 0 и 24 (то есть отобразится 100 и 124)), и текущий час (+100). А также время системы.
6 не входит в интервал от 0 до 3, батник завершится.
Для 1.04 батник должен отработать (при правильном описании файлов)

Уточнение: Строку
If %tNow% GTR %tEnd% Exit /B 0
необходимо исправить для более правильного попадания текущего времени в заданный интервал
Код: Выделить весь код
If %tNow% GEQ %tEnd% Exit /B 0

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


Последний раз редактировалось megaloman, 13-07-2018 в 17:06.


Отправлено: 05:36, 12-07-2018 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Отключение, изменение времени входа и даты действия учетки, перегон в другой OU Elven Скриптовые языки администрирования Windows 1 03-08-2015 12:49
CMD/BAT - Запуск программы в определённый интервал времени BOBAT Скриптовые языки администрирования Windows 9 18-01-2015 19:22
Службы - интервал синхронизации времени Kirill-by Microsoft Windows 2000/XP 2 08-12-2014 11:50
CMD/BAT - если файл LoadParm.exe не удается найти и далее произвести действия expressq123 Скриптовые языки администрирования Windows 0 10-07-2014 15:59
[решено] Скрипт, изменяющий позицию курсора через определенный интервал времени Vadikan AutoIt 2 28-07-2009 12:08




 
Переход