![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сделать действия, если интервал времени |
|
CMD/BAT - Сделать действия, если интервал времени
|
Ветеран Сообщения: 558 |
Здравствуйте, есть код, который ждет определенное количество минут (которые определяет по имени файла), после чего удаляет и копирует файлы (действия выделены жирным).
@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
|
Профиль | Отправить PM | Цитировать Alexander_88, вот эти игры с параметрами в виде имён файлов мне совсем перестают нравиться. Зачем сие было решено делать именно так, а не как у людей — например, в виде банально-древнего ini-файла или новомодного xml/json-файла?
|
Отправлено: 23:23, 10-07-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 558
|
Профиль | Отправить PM | Цитировать Да если б я знал как это сделать.. ведь по простому для себя делаю)
эти файлы я переименую с помощью других батников, батники запускаются через делфи, кнопками.. как бы такая панель управления ![]() |
Отправлено: 00:13, 11-07-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Если делаете что-то на Delphi — зачем Вам вообще пакетные файлы? Пишите уж всё на Delphi.
Цитата Alexander_88:
Скрытый текст
![]() или так: Скрытый текст
![]() |
|
Отправлено: 00:54, 11-07-2018 | #4 |
Ветеран Сообщения: 547
|
Профиль | Сайт | Отправить PM | Цитировать Alexander_88,
я для подобных целей 100 лет назад написал утилитку before http://forum.oszone.net/post-2277704.html |
|
------- Отправлено: 09:42, 11-07-2018 | #5 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Если всё-таки очень хочется, переделал Ваш код
@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
|
Профиль | Отправить 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 время 1:04 батник появляется и исчезает.. даже не выполняет задержку sleep, файлы вроде не копирует, проверил. Продовал также сменить интервал с "ot - 1", "do - 3".. то же самое... может что - то не то делаю? 1 Нужно сначала выполнить задержку sleep, потом пункт 2 2 если текущее время в интервале ot do часов.. то выполнить действия и завершиться.......... если не в текущем интервале, то начать с пункта 1. Цитата:
если от 0 до 3 текущее время например 6... получается текущее время и больше до и меньше от... т.е. под два условия попадает? у меня по идее на примере время меньше "ot - *", значит батник не должен просто завершаться? |
|
Отправлено: 23:26, 11-07-2018 | #7 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Alexander_88, обратите внимание, имена файлов указываются без путей.
Пути к папкам указаны выше.
Естественно что батник при Ваших описаниях не находит файл sleep и завершается. Для отладки можете убрать rem перед echo. При этом полУчите время (часы + 100) из файлов ot, do (если они существуют в указанной папке, иначе будет 0 и 24 (то есть отобразится 100 и 124)), и текущий час (+100). А также время системы. 6 не входит в интервал от 0 до 3, батник завершится. Для 1.04 батник должен отработать (при правильном описании файлов) Уточнение: Строку If %tNow% GTR %tEnd% Exit /B 0 необходимо исправить для более правильного попадания текущего времени в заданный интервал |
------- Последний раз редактировалось megaloman, 13-07-2018 в 17:06. Отправлено: 05:36, 12-07-2018 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|