Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление каталогов и файлов в папке, плюс исключения (http://forum.oszone.net/showthread.php?t=347117)

shaman-lip 24-11-2020 22:01 2940915

Удаление каталогов и файлов в папке, плюс исключения
 
Добрый вечер. Есть такая задача.
нужно чистить каталог 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 2940927

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

shaman-lip 25-11-2020 07:24 2940944

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

DJ Mogarych 25-11-2020 09:29 2940953

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

shaman-lip, вот вы описали задачу, я, например, не понимаю, что нужно.
Цитата:

Цитата shaman-lip
за исключением папки Егаис в ней нельзя никогда удалять файл curl.exe Все остальное что старше 3 дней также можно удалить »

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

alpap 25-11-2020 15:28 2940993

исключения можно делать подобным образом:
Код:

.../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 2941001

Цитата:

Цитата DJ Mogarych
а у нас народ любит такие вещи. Я тут тоже в конторе почистил темпы, оказалось, что 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 2941009

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

Iska 25-11-2020 19:18 2941016

Цитата:

Цитата DJ Mogarych
…оказалось, что 1С хранит там какие-то неимоверно важные файлы (на постоянной основе!). »

Мне такового не попадалось.

DJ Mogarych 26-11-2020 09:09 2941056

Iska, это местные реалии. То ли внедренцы какие так написали, то ли здешние программисты.

Iska 26-11-2020 14:43 2941090

DJ Mogarych, а… Ну, да, такое бывает.


Время: 12:52.

Время: 12:52.
© OSzone.net 2001-