Главная

Saturday, 9 July 2016

Очистка папки в nnCron с залочеными файлами.

Всем привет.

Казалось бы, тривиальная задача которую в два шелчка можно запихнуть в nnCron - очистка временной папки Windows. Желательно с вложенными папками.

Получаем приблизительно такой скрипт:
Time: 5 17 1 * * *
Action:
WITHDIRS
PURGE-OLD: "D:\TEMP\*.*" 16

А давай ка проверим его выполнение. И... получаем "Отказано в доступе". Работа скрипта прервана.


Ну разумеется, во временной папке что-то от самой системы тоже держит свой мусор. Перезапуск задания под правами админа ситуацию не меняет. И дополнительных опций, чтобы подсказать nnCron-у чтобы просто пропускал  залоченные файлы тоже нет. Могу предположить что nnCron надо настроить как службу. Но проще, наверное, написать внешний скрипт. Пример ниже:

goto start
:fn1
for /d %%i in ("%~1\*") do (call :fn1 "%%i" & rd /q "%%i")
exit /b
:start
rem Delete any files in subfolders
del . /f/s/q  "D:\TEMP"
rem Delete empty subfolders
call :fn1 "D:\TEMP"

Поместить его в командный файл и подсунуть на выполнение каждые 16 дней в свой nnCron. Командный файл BAT или CMD решайте сами. Разница между ними есть, но небольшая: для команд PATH/APPEND/PROMPT/SET/ASSOC в файлах с расширением CMD ERRORLEVEL устанавливается вне зависимости от ошибок. А в файлах с расширением BAT эти команды устанавливают ERRORLEVEL ТОЛЬКО при ошибке.

Успехов.


3 comments:

  1. for /d %%i in ("%CD%") do (
    set NNPROGRAMFILESSHORT=%%~si
    )
    START %NNPROGRAMFILESSHORT%\nncron.exe -ns -dir %NNPROGRAMFILESSHORT%

    ReplyDelete
  2. Чудово! Дуже допомагає чистити теку Темп після клієнта FossDoc. Дякую.

    ReplyDelete
  3. В строке del . /f/s/q "D:\TEMP" точка лишняя!

    ReplyDelete

А что вы думаете по этому поводу?