Войти

Показать полную графическую версию : Сделать действия, если интервал времени


Alexander_88
10-07-2018, 23:17
Здравствуйте, есть код, который ждет определенное количество минут (которые определяет по имени файла), после чего удаляет и копирует файлы (действия выделены жирным).

@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
10-07-2018, 23:23
Alexander_88, вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться. Зачем сие было решено делать именно так, а не как у людей — например, в виде банально-древнего ini-файла или новомодного xml/json-файла?

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

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

Да если б я знал как это сделать.. ведь по простому для себя делаю) »
Например, так:
https://i.imgur.com/U4JtDJp.png
или так:
https://i.imgur.com/1rU0AqE.png

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

megaloman
11-07-2018, 16:29
вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться »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 - *." указано время менее текущего, ничего не делается, батник завершается

Alexander_88
11-07-2018, 23:26
Спасибо всем за ответы...

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

@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
12-07-2018, 05:36
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




© OSzone.net 2001-2012