PDA

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


shaman-lip
24-11-2020, 22:01
Добрый вечер. Есть такая задача.
нужно чистить каталог TEMP удалять оттуда все старше например 3 дней. Но за исключением папки Егаис в ней нельзя никогда удалять файл curl.exe Все остальное что старше 3 дней также можно удалить.
пробовал делать через forfiles
forfiles /p "%LocalAppdata%\Temp" /s /d -3 /c "cmd /c rd /s /q @file"
forfiles /p "%LocalAppdata%\Temp" /s /d -3 /c "cmd /c del /q /f @file"
тоесть сначала удаляю папки потом пробегаю оставшиеся файлы. первый раз если темп большой то делается довольно долго все, но потом норм в принципе. Но вот как сделать в данной конструкции еще исключения, не очень понимаю. поидее надо наверное if туда засунуть, но както громоздко получается и не уверен что все будет работать.

Iska
24-11-2020, 23:20
shaman-lip, ответьте себе на вопросы:

что делает каталог ЕГАИС в каталоге временных файлов?
что делает в нём файл curl.exe?!
Вы не с того бока зашли.

shaman-lip
25-11-2020, 07:24
лежат они там. Почему - без понятия, но вот так вот у нас есть. Менять это нет возможности, этим другая служба занимается. В принципе как вариант можно наверное и совсем не трогать данный каталог, чтобы не заморачиваться сильно.

DJ Mogarych
25-11-2020, 09:29
Iska, а у нас народ любит такие вещи. Я тут тоже в конторе почистил темпы, оказалось, что 1С хранит там какие-то неимоверно важные файлы (на постоянной основе!). А всё потому, что одинэсники безграмотные.

shaman-lip, вот вы описали задачу, я, например, не понимаю, что нужно.за исключением папки Егаис в ней нельзя никогда удалять файл curl.exe Все остальное что старше 3 дней также можно удалить »Как это понимать? Поставьте задачу чётко и ясно.
Например: в папке C:/TEMP удалить все файлы и папки старше трёх дней за исключением папки "егаис" и файла curl.exe.
Я верно предположил?

alpap
25-11-2020, 15:28
исключения можно делать подобным образом:

.../c "cmd /c echo @path"|find /i /v "Егаис"
.../c "cmd /c echo @file"|find /i /v "curl.exe"

и это надо оборачивать в for /f, например:

@echo off
set "d=%LocalAppdata%\Temp"
set "d1=A"
set "d2=Егаис"
set "f1=aaa.txt"
set "f2=curl.exe"
set dt=3

:: Файлы
for /f "delims=" %%a in ('forfiles /p "%d%" /s /d -%dt% /c "cmd /c if @isdir==FALSE echo @path"^|findstr /v /c:"%f1%" /c:"%f2%"') do >nul 2>&1 del /q "%%~a"
:: Папки
for /f "delims=" %%a in ('forfiles /p "%d%" /s /d -%dt% /c "cmd /c if @isdir==TRUE echo @path"^|findstr /v /c:"%d1%" /c:"%d2%"') do >nul 2>&1 rd /s /q "%%a"
pause& exit

YuS_2
25-11-2020, 17:02
а у нас народ любит такие вещи. Я тут тоже в конторе почистил темпы, оказалось, что 1С хранит там какие-то неимоверно важные файлы »
Действительно, ситуация нередкая...
У меня тоже когда-то была такая задача...
Вот, из архивов, батник исключающий подкаталоги (не файлы):
@echo off
rem Вариант очистки временных папок с выводом удаляемых, очищаемых и исключённых каталогов (но не файлов)
echo Процесс очистки временных каталогов...
echo Старт: %time%
echo.

rem Перечень каталогов для очистки (задаются папки с абсолютными путями):
set "d1=%temp%"
set "d2=%windir%\temp"
set "d3="
rem количество очищаемых каталогов:
set n=2

rem Перечень подкаталогов исключаемых из удаления в одном корневом каталоге
rem (задаются только имена папок, без путей и слешей и корневой каталог с абсолютным путем):
rem корневой каталог
set "root=%temp%"
rem подкаталоги
set "e1=temp"
set "e2=123"
set "e3=Maxthon5Cache"
set "e4="
rem количество исключаемых подкаталогов:
set k=3

setlocal enabledelayedexpansion
rem Составляем массивы обрабатываемых каталогов в строки:
for %%t in (d e) do (
set x=%%t
if "!x!"=="d" (set /a z=n) else (set /a z=k)
for /l %%g in (1,1,!z!) do (
if defined %%t%%g (set var=%%g&call :per)
)
)
rem Массивы каталогов для обработки (для вывода раскомментировать):
::echo очищаются - %arr_d%
::echo исключения - %arr_e%
rem Предохранитель для проверки:
::pause&exit

rem Цикл удаления файлов и подкаталогов:
for %%v in (%arr_d%) do (
pushd "%%~v"
for /f "delims=" %%i in ('dir /b/ad') do set "fd=%%~dpnxi"&call :rem
echo Удаляем только файлы, в каталоге: "%%~v"
>nul 2>&1 del /f/q/a "%%~v"
popd
)
echo.
echo Стоп: %time%
pause&exit /b
:per
set "var=!%x%%var%!"
set "ext=!arr_%x%!"
if "%x%"=="d" if not exist "!var!\" exit /b
set "arr_%x%=%ext% "%var%""
exit /b
:rem
rem Проверка списка исключений:
for %%m in (%arr_e%) do (
if /i "%fd%" equ "%root%\%%~m" echo Исключается каталог: "%fd%"&exit /b
)
echo Удаляем каталог: "%fd%"
>nul 2>&1 rd /s/q "%fd%"
exit /b

shaman-lip
25-11-2020, 18:28
"Как это понимать? Поставьте задачу чётко и ясно.
Например: в папке C:/TEMP удалить все файлы и папки старше трёх дней за исключением папки "егаис" и файла curl.exe.
Я верно предположил?"
Да поняли совершенно верно )
спасибо за ответы, буду пробовать.

Iska
25-11-2020, 19:18
…оказалось, что 1С хранит там какие-то неимоверно важные файлы (на постоянной основе!). »
Мне такового не попадалось.

DJ Mogarych
26-11-2020, 09:09
Iska, это местные реалии. То ли внедренцы какие так написали, то ли здешние программисты.

Iska
26-11-2020, 14:43
DJ Mogarych, а… Ну, да, такое бывает.




© OSzone.net 2001-2012