#windows #batch-file
#Windows #пакетный файл
Вопрос:
Как бы мне создать самоисполняющийся пакетный файл для удаления файлов в определенной папке. Сценарий: У меня есть папка на сервере, куда попадают все отсканированные документы после их сканирования. Они хотят, чтобы отсканированные документы были удалены через 1 день. Можно ли создать пакетный файл для выполнения этого каждый день?
Ответ №1:
Вы можете использовать встроенный планировщик задач — он может вызывать пакетный файл или практически все, что угодно.
(Я предполагаю, что Windows, поскольку вы упомянули пакетные файлы).
Ответ №2:
Это довольно известный метод, и он был задокументирован в MSDN некоторое время назад. Этот метод работает как в Windows 95, так и в Windows NT. Это работает, потому что пакетные файлы MS-DOS способны сами себя удалять. Чтобы протестировать этот метод, создайте небольшой пакетный файл, содержащий единственную команду:
del %0.bat
Пакетный файл при запуске удаляет сам себя и выдает ошибку «Не удается найти пакетный файл». Эта ошибка — всего лишь простое сообщение, поэтому ее можно смело игнорировать. Само по себе это не слишком полезно, но при изменении для удаления нашего исполняемого файла это решает нашу проблему, хотя и довольно решительным образом. Наш исполняемый файл создаст пакетный файл (называемый C:DelUs.bat ) со следующим содержимым:
:Repeat
del "C:MYDIRMYPROG.EXE"
if exist "MYPROG.EXE" goto Repeat
rmdir "C:MYDIR"
del "DelUS.bat"
Этот пакетный файл неоднократно пытается удалить указанный файл и будет работать непрерывно, потребляя процессор, пока не добьется успеха. Когда исполняемый файл был удален, пакетный файл затем удаляет сам себя.
Исполняемый файл должен появиться из пакетного файла с помощью CreateProcess, а затем должен немедленно завершиться. Было бы хорошей идеей присвоить потоку выполнения пакетного файла низкий приоритет, чтобы он не получал много времени выполнения до завершения работы исходного исполняемого файла.
Прочитайте всю статью на http://www.catch22.net/tuts/self-deleting-executables который содержит полный код для этого метода.