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

Ответить
Аватара пользователя
Alexander_88

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

Сообщение Alexander_88 »

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





Код:

Код: Выделить всё

@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 утра.
Аватара пользователя
Iska

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение Iska »

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

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение Alexander_88 »

Да если б я знал как это сделать.. ведь по простому для себя делаю)

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

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение Alexander_88 »

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




Цитата Alexander_88:



Да если б я знал как это сделать.. ведь по простому для себя делаю)
CMD/BAT - Сделать действия, если интервал времени




Например, так:



Скрытый текст

[spoiler]Изображение[/spoiler]




или так:



Скрытый текст

[spoiler]Изображение[/spoiler]
Аватара пользователя
Опиум

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение Опиум »

Alexander_88,

я для подобных целей 100 лет назад написал утилитку before

CMD/BAT - Консольные утилитки для .bat .cmd
Аватара пользователя
megaloman

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение megaloman »

Цитата Iska:



вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться
CMD/BAT - Сделать действия, если интервал времени




Alexander_88, Как-то всё извращенно-мудрено


Если всё-таки очень хочется, переделал Ваш код

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 - *." указано время менее текущего, ничего не делается, батник завершается
Аватара пользователя
Alexander_88

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение Alexander_88 »

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



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





Код:

Код: Выделить всё

@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 - *", значит батник не должен просто завершаться?
Аватара пользователя
megaloman

Re: CMD/BAT - Сделать действия, если интервал времени

Сообщение megaloman »

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 батник должен отработать (при правильном описании файлов)



Уточнение: [/i]Строку

If %tNow% GTR %tEnd% Exit /B 0

необходимо исправить для более правильного попадания текущего времени в заданный интервал

Код:

Код: Выделить всё

If %tNow% GEQ %tEnd% Exit /B 0
Ответить

Вернуться в «Скриптовые языки администрирования Windows»