Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/89: Рейтинг темы: голосов - 89, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16

Удаление файлов в определённое время и запуск рядом лежащей программы

26.11.2014, 17:10. Показов 17699. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть такова:
Есть дирректория программы в ней есть несколько папок и несколько файлов.
Нужен батник, который в обычное время запускает launcher.exe, который лежит рядом с батником. В определённый день (который записан в батнике), при запуске этого батника, должно произойти удаление папки REG (находится рядом с батником), удаление файл launcher.exe, потом должен запуститься demo_off.exe, дождаться окончания распаковки и запустить новый launcher.exe.
И если в день удаления, не будет запущен батник, то после этой даты, при первом же запуске - батник должен проделать вышеуказанную операцию.

Тоесть, должно получиться что-то типа такого:
Bash
1
2
3
4
5
команда проверить дату. Если не 24.11.2014, то идём дальше
Если нет - то удаляем \REG, удаляем Launcher.exe
 
start /w bemo_off.exe
start Launcher.exe
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2014, 17:10
Ответы с готовыми решениями:

Удаление из папки всех файлов, которые не содержат определённое слово
Добрый день! Прошу помощи, задача следующая: имеется некая папка в которой находится очень много текстовых файлов, нужно удалить те...

Циклический запуск программы для файлов в папке, имена файлов в виде параметров для программы
Имеется задача - с помощью bat файла циклически запускать программу convert.exe для всех файлов в папке с расширением *.blok. Вывести...

Запуск другой программы через определённое время
Всем привет, незнаю где напмсать!Мне нужно что бы программа на с ++ запускала через определённое время другую прогу типа .ехе как это...

20
 Аватар для oLeg_TsAr
-8 / 1 / 0
Регистрация: 19.07.2014
Сообщений: 113
Записей в блоге: 1
27.11.2014, 00:03
Bash
1
2
3
@ECHO off
if %Date% == 26.11.2014(Действие если 26.11.2014)
if not %Date% == 26.11.2014 (Действие если не 26.11.2014 Del Launcher.exe)
1
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16
27.11.2014, 11:55  [ТС]
oLeg_TsAr, спасибо конечно, однако не совсем то решение.
Нужно:
1) действие ДО 26.11.2014, действие если 26.11.2014 и действие после 26.11.2014.
2) Как связать ваш кусок скрипта и запуск программ.

т.е. если до 26.11.2014 , то будет:
Bash
start Launcher.exe
Если 26.11.2014 и после, то сначала удалить папку REG, потом:
Bash
start /w bemo_off.exe
И потом уже:
Bash
start Launcher.exe
0
 Аватар для oLeg_TsAr
-8 / 1 / 0
Регистрация: 19.07.2014
Сообщений: 113
Записей в блоге: 1
27.11.2014, 19:39
Bash
1
2
3
4
5
6
7
8
@ECHO off
if %Date% == 23.11.2014(start Launcher.exe)
if %Date% == 24.11.2014(start Launcher.exe)
if %Date% == 25.11.2014(start Launcher.exe)
if %Date% == 26.11.2014(start Launcher.exe)
if not %Date% == 26.11.2014 (RD REG)
if not %Date% == 26.11.2014 (start /w bemo_off.exe) Вопрос w это диск? если диск start W:\bemo_off.exe
if not %Date% == 26.11.2014 (start Launcher.exe)
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
27.11.2014, 22:25
Лучший ответ Сообщение было отмечено dartkane как решение

Решение

Цитата Сообщение от dartkane Посмотреть сообщение
если до 26.11.2014 , то будет:
start Launcher.exe
Если 26.11.2014 и после, то сначала удалить папку REG, потом:
start /w bemo_off.exe
И потом уже:
start Launcher.exe

Bash
1
2
3
4
5
6
7
8
@echo off
 
set $date=20141126
 
for /f "tokens=2 delims==." %%i in ('wmic OS get LocalDateTime /value') do set x=%%i
if %x:~,8% lss %$date% (start "" "Launcher.exe") else (rd /q/s "REG"& start "" /w "bemo_off.exe"& start "" "Launcher.exe")
 
exit /b
1
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16
01.12.2014, 11:56  [ТС]
ComSpec, спасибо, помогло.
Может это наглость с моей стороны, но возможно ли заставить скрипт, брать дату из рядом лежащего файла?
Например: из dt.odx
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
02.12.2014, 01:16
dartkane, я не понял, о какой из дат "из рядом лежащего файла" идёт речь: дате изменения файла, дате создания файла или дате, которая записана в файл.
0
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16
02.12.2014, 07:56  [ТС]
ComSpec, нужно, чтобы вот этот параметр:
Bash
1
set $date=20141126
, брался из рядом лежащего файла dt.odx.
Просто я хочу запихать в exe-файл сам скрипт, а дату переодически надо менять.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
02.12.2014, 15:36
Лучший ответ Сообщение было отмечено dartkane как решение

Решение

Код получился "революционным": вывод результатов нескольких команд записывается в одну строку. а затем даты из этой строки сравниваются в лексикографическом порядке.


Дата в файле "dt.odx" должна быть записана в первой строке в формате
Code
1
yyyymmdd
.


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
for /f "tokens=1,2 delims=." %%i in ('
 "<"dt.odx" set /p x=& cmd /c set /a x&<nul set /p=.& wmic OS get LocalDateTime| findstr \."
') do (
 if not "%%j" lss "%%i000000" (
  start "" "Launcher.exe"
 ) else (
  rd /q/s "REG"& start "" /w "bemo_off.exe"& start "" "Launcher.exe"
 )
 )
 
exit /b
2
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16
02.12.2014, 19:02  [ТС]
Цитата Сообщение от ComSpec Посмотреть сообщение
Дата в файле "dt.odx" должна быть записана в первой строке в формате
Код Code
1
yyyymmdd
А есди ниже будут комментарии - не будет проблем?

Добавлено через 13 минут
ComSpec, почему - то не срабатывает.
Он сразу запускает Launcher.exe хотя сначала должен снести папку у и запустить demo_off.exe
Старый скрипт срабатывает.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
02.12.2014, 19:12
dartkane, что из себя представляет файл "dt.odx"? Почему именно такое расширение?
0
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 16
02.12.2014, 19:52  [ТС]
ComSpec, обычный txt-файл с другим расширением. Кодировка анси. Нужно такое расширение, чтобы обычным блокнотом нельзя было открыть.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
02.12.2014, 20:52
Лучший ответ Сообщение было отмечено dartkane как решение

Решение

dartkane, нашёл причину: "вдруг, откуда ни возьмись", в моём коде появилось... слово "not".



Вот вариант, который будет работать корректно с Вашими данными:


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
for /f "tokens=1,2 delims=." %%i in ('
 "<"dt.odx" set /p x=& cmd /c set /a x&<nul set /p=.& wmic OS get LocalDateTime| findstr \."
') do (
 if "%%j" lss "%%i000000" (
  start "" "Launcher.exe"
 ) else (
  rd /q/s "REG"& start "" /w "bemo_off.exe"& start "" "Launcher.exe"
 )
 )
 
exit /b

.



Цитата Сообщение от dartkane Посмотреть сообщение
А если ниже будут комментарии - не будет проблем?

Не будет.
2
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 43
22.03.2015, 14:46
ComSpec, а можно в последнем варианте кода сделать так, чтобы в фале dt.odx искалась фраза (например, odx-2014112)? Где "odx-" - это просто маркер, а "2014112" - это необходимая дата для сравнения. Это может стать упрощённой версией защиты. Т.е. в файл dt.odx указывается абракадара, внутри которой есть odx-2014112. Так сказать ключ со сроком действия.

С благодарностью и уважением.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
23.03.2015, 05:31
Hitogui, пробуйте:


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
 
set "file=dt.odx"
set "prefix=odx-"
 
for /f "delims=" %%i in ('
 "<"%file%" find "%prefix%""
') do (
 set x=%%i
 for /f "delims=" %%j in ('
  cmd/v/c echo "!x:*%prefix%=!"
 ') do (
  set y=%%~j
  for /f "tokens=1,2 delims=." %%k in ('
   ^<nul cmd/v/c "set/p=!y:~,8!".^&^
   wmic OS get LocalDateTime^| find "."
  ') do (
   if "%%l" lss "%%k000000" (
    echo The command to start the program must be here.
   ) else (
    echo Time has expired.
   )
  )
 )
)
 
pause>nul& exit/b

.
1
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 43
23.03.2015, 15:53
ComSpec, вы просто удивляете своим кодовством х)

Я немного подредактировал ваш код для эксперимента. Указал команду х)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
 
set "file=dt.odx"
set "prefix=odx-"
 
for /f "delims=" %%i in ('
 "<"%file%" find "%prefix%""
') do (
 set x=%%i
 for /f "delims=" %%j in ('
  cmd/v/c echo "!x:*%prefix%=!"
 ') do (
  set y=%%~j
  for /f "tokens=1,2 delims=." %%k in ('
   ^<nul cmd/v/c "set/p=!y:~,8!".^&^
   wmic OS get LocalDateTime^| find "."
  ') do (
   if "%%l" lss "%%k000000" (
    start notepad.exe
   ) else (
    echo Time has expired.
   )
  )
 )
)
pause>nul& exit/b
И вот файл dt.odx
Code
1
2
3
4
5
6
7
8
9
10
11
12
ldlUdZBtzFXKOPtT+Coq0DhfadzBo1
Uzmm3UFFESi5eu6dActZJ6m5b/luOm
Spgr20150324LRsg4Z8O0-ayUcpGXq
fPGuDEHHNeBpGWFA4M75ChwyPL56yl
hdP2JS7a+7AzuKajWKtuJAK0WRfg0d
xfqGJ3O7juI8yodx-20150324F0jk+
1z8GvAWFcghwvcQ7KivsrBYWVQzbhH
jTqEI-Ss26qvGCQjQwrUaPHWIVLf3G
TYJjKmk3qrY7P7LeL9HMJld4PYDC8p
yaO7S+A0tx/dBfxB44hut/7T3s-Z+o
0kgfm4BwMVnhWqwx0rjM6wwDOTIV1y
KeZjNsLwrAnA==zGo4FDU58rsA6k
С чем столкнулся. Если дата в файле *.odx больше текущей, то запускается блокнот, но остаётся висеть окно cmd.exe. В моём случае это не критично. Я планирую конвертировать bat в exe со скрытым режимом запуска.

С благодарностью и уважением.
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 43
25.03.2015, 15:07
Кстати, я осознал, что привязка к системной дате слабая проверка. А что если брать текущую дату из интернет. Например, вот с этого сайта http://time.jp-net.ru/ или с любого другого, хоть с сервера https://www.cyberforum.ru/. Это возможно?
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
25.03.2015, 19:49
Цитата Сообщение от Hitogui Посмотреть сообщение
А что если брать текущую дату из интернет. Например, вот с этого сайта http://time.jp-net.ru/... Это возможно?


Возможно:


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
 
rem Получение даты с сайта "http://time.jp-net.ru/".
 
for /f "tokens=3-5 delims=- " %%i in ('
 mshta "about:<hta:application windowstate='minimize'><iframe src='http://time.jp-net.ru/' application='yes' onload='(new ActiveXObject("Scripting.FileSystemObject")).GetStandardStream(1).Write(window.frames.item(0).document.body.innerText);window.close();'></iframe>"^
 ^| findstr \-
') do (
 set $date=%%j.%%k.%%i
)
 
echo %$date%
 
pause>nul
 
exit/b

;


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
 
rem Получение времени с сайта "http://time.jp-net.ru/".
 
for /f "tokens=3" %%i in ('
 mshta "about:<hta:application windowstate='minimize'><iframe src='http://time.jp-net.ru/' application='yes' onload='(new ActiveXObject("Scripting.FileSystemObject")).GetStandardStream(1).Write(window.frames.item(0).document.body.innerText);window.close();'></iframe>"^
 ^| findstr :..:
') do (
 set $time=%%i
)
 
echo %$time%
 
pause>nul
 
exit/b

.
2
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 43
26.03.2015, 15:41
ComSpec, нужен Ваш экспертный быстрый взгляд.
Я ещё плохо понимаю правила пунктуации в скрипте. Поэтому ошибки вылазят. Какие-то устраняю сам, перечитывая материалы на форуме. Но тут тупик.
Я попытался объединить два Ваших кода в этой теме (получение даты из интернет и проверка даты в файле-ключе). Часть кода в Вашей строке
Code
1
wmic OS get LocalDateTime
заменил на переменную
Code
1
%$date%
Вот результат
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@echo off
set "file1=dt.odx"
set "prefix=odx-"
 
for /f "tokens=3-5 delims=- " %%i in ('
 mshta "about:<hta:application windowstate='minimize'><iframe src='http://time.jp-net.ru/' application='yes' onload='(new ActiveXObject("Scripting.FileSystemObject")).GetStandardStream(1).Write(window.frames.item(0).document.body.innerText);window.close();'></iframe>"^
 ^| findstr \-
') do (
 set $date=%%j.%%k.%%i
)
 
echo %$date%
 
pause>nul
 
for /f "delims=" %%i in ('
 "<"%file1%" find "%prefix%""
') do (
 set x=%%i
 for /f "delims=" %%j in ('
  cmd/v/c echo "!x:*%prefix%=!"
 ') do (
  set y=%%~j
  for /f "tokens=1,2 delims=." %%k in ('
   ^<nul cmd/v/c "set/p=!y:~,8!".^&^
   "%$date%"^| find "."
  ') do (
   if "%%l" lss "%%k000000" (
    start notepad.exe
   ) else (
    echo.
    echo. Activation ended.
    echo.
   )
  )
 )
)
pause>nul&exit/b
В итоге появляется ошибка
""26.03.2015"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Я, как в старом анекдоте", методом тыка уже перепробовал убирать/добавлять кавычки, убирал знак "^", даже "твою мать" говорил. Не работает. х)

Хэлп ми, плиз.

С уважением.
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
27.03.2015, 07:14
Цитата Сообщение от Hitogui Посмотреть сообщение
Часть кода в Вашей строке
Windows Batch file
1
wmic OS get LocalDateTime
заменил на переменную
Windows Batch file
1
%$date%
Цитата Сообщение от Hitogui Посмотреть сообщение
В итоге появляется ошибка
""26.03.2015"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.



Hitogui, в этом месте кода ожидается наличие команды, а поскольку значение данной переменной командой не является, ошибка закономерна. То есть Вы на место команды, результат выполнения которой должен подвергаться разбору, ставили уже готовый результат. Чтобы задействовать значение переменной, нужно использовать команду для вывода результата расширения переменной, например, "ECHO":
Windows Batch file
1
echo %$date%
.

Но даже если бы Вы это сделали, нужного результата всё равно бы не получили, поскольку подставляемая дата имеет формат, отличный от выводимого убранной командой.



Вот такой код будет работать:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@echo off
 
set "file1=dt.odx"
set "prefix=odx-"
 
for /f "tokens=3-5 delims=- " %%i in ('
 mshta "about:<hta:application windowstate='minimize'><iframe src='http://time.jp-net.ru/' application='yes' onload='(new ActiveXObject("Scripting.FileSystemObject")).GetStandardStream(1).Write(window.frames.item(0).document.body.innerText);window.close();'></iframe>"^
 ^| findstr \-
') do (
 set $date=%%i%%k%%j
)
echo The date from time.jp-net.ru is %$date%.
 
for /f "delims=" %%i in ('
 "<"%file1%" find "%prefix%""
') do (
 set x=%%i
 for /f "delims=" %%j in ('
  cmd/v/c echo "!x:*%prefix%=!"
 ') do (
  set y=%%~j
  for /f "tokens=1,2 delims=." %%k in ('
   ^<nul cmd/v/c "set/p=!y:~,8!."^&^
   echo %$date%
  ') do (
   echo The date from dt.odx is         %%k.
   if %%l lss %%k (
    start "" notepad
   ) else (
    echo.
    echo Your activation period is ended.
    echo.
   )
  )
 )
)
 
pause>nul& exit/b

.



Этот код можно сделать и гораздо более лаконичным, монололитным и даже более коротким. Если у Вас есть такое желание, то я этим займусь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2015, 07:14
Помогаю со студенческими работами здесь

Запуск программ в определённое время
Доброго времени суток. Я пишу приложение для запуска программ в определённое время (или через указанное время. Ещё не решил:scratch:) И...

Запуск игровых программ в определённое время
Доброго времени суток, не знал куда написать - поэтому пишу сюда. Посоветуйте пожалуйста программу подобную к WebLocker, но только для...

Автоматический запуск asp-скрипта на iis-сервере в определённое время
Каким образом настроить автоматический запуск asp-скрипта на iis-сервере в определённое время, скажем в 23.59 каждые сутки?

Запуск, удаление файлов в Lubuntu!
Здравствуйте, уважаемые! Поставил Lubuntu на ноут, которое уже многое повидал и требует минимальной загрузки от системы, задача -...

Запуск бат файлов индивидуально в определенное время
Всем привет. Пишу программу, которая в определенное время архивирует файлы или папку. Приложение работает. В одном окне создаются бат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru