Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Подсчет обьема файлов определенного расширения и их удаление

Ответить
Настройки темы
CMD/BAT - [решено] Подсчет обьема файлов определенного расширения и их удаление

Аватара для ilyadud

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Пишу программу для чистки диска, но не могу решить одну проблему - мне необходимо найти файлы с расширением, например: *.old, удалить их, но при этом посчитать суммарный обьем удаленных файлов. Так проделать для нескольких расширений, а потом выдать обьем очищенного места на ЖД.

С удалением файлов я разобрался, а вот как посчитать общий обьем, не знаю.

Помогите! Буду благодарен!

Отправлено: 07:22, 05-07-2012

 

Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


Set Where=F:\Директория - Задали директорию, где ищем файлы
Set What=.exe .doc .xls .js .tif .ююю - задали через пробел расширения файлов (с точкой впереди) (.ююю - для теста сделал несуществующее расширение)

Set W=%What:.=*.% - для Dir приготовили строку с масками *.exe *.doc *.xls *.js *.tif *.ююю

cd /D "%Where%" -заданную директорию сделал текущей

IF %ERRORLEVEL%==0 ( - Если это удалось, запускаю Dir в текущей директории для всех поддиректорий.
В постановке задачи было
Цитата:
Так проделать для нескольких расширений, а потом выдать обьем очищенного места на ЖД.
Поэтому запускаю Dir для каждого расширения отдельно. При этом ловлю предпоследнюю строку выдачи Dir, где подсчитано кол-во файлов и их объём. Я не видел смысла превращать эту строку в число, очевидно, это просто сделать. Если файлов с указанным расширением не найдено, в выдаче Dir отсутствует слово байт (придумано, конечно, коряво)
Echo %Where%
FOR %%e IN (%What%) DO (
FOR /F "usebackq tokens=*" %%m IN (`dir *%%e /s`) DO Set First=!Second! & Set Second=%%m
Set M=!First:байт=!
If Not "!M!"=="!First!" Echo *%%e !First!
)
Этот кусок в принципе можно выбросить, если статистика по отдельным расширениям не интересна - это в разы ускорит выполнение.
Далее считаю общее число по всем заданным расширениям dir *.exe *.doc *.xls *.js *.tif *.ююю /s

FOR /F "usebackq tokens=*" %%s IN (`dir %W% /s`) DO Set First=!Second! & Set Second=%%s
Set M=!First:байт=!
If Not "!M!"=="!First!" Echo %W% !First!

Единственное, не пойму, что, код нерабочий? - у меня прекрасно работает.
sov44, Вы не указывали объёмы удаляемых файлов, один фильмец прекрасно перекроет 2Гига.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:34, 06-07-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


sov44, По мотивам Вашего скрипта написал свой, начал сомневаться, что быстрее работает
Код: Выделить весь код
@Echo Off

Set Where=F:\Папочка
cd /D "%Where%"

set Rash=*.exe *.doc *.xls *.js *.tif *.ююю

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set iSumL=0
FOR /F "usebackq delims=" %%I IN (`dir %Rash% /s /b /A:-d-H`) DO Set /A iSumL=!iSumL!+%%~zI
Echo !iSumL!
Errorlevel после CD забыл, но это не принципиально. Удаления не делал. У Вас конечно лучше совмещение удаления и подсчета места, у меня так сделать нельзя, но я заморачивался на том, что так суммировать размер файлов нежелательно (про объёмы файлов в постановке ничего не было)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 06-07-2012 в 22:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:22, 06-07-2012 | #12


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата sov44:
Логов и темпов набрать на два гига, это надо постараться »
Легко.

Отправлено: 02:46, 07-07-2012 | #13


Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


Переписал свой батник аккуратнее, чтобы не быть привязанным к языку выдачи команды Dir (слово байт больше не ловлю, анализирую кол-во строк в выдаче Dir)
Вообще-то команда Dir возвращает Errorlevel=1 если файлы не найдены. Мне не удалось его поймать, когда Dir помещена в For. Может, кто-то подскажет? Было бы существенно лучше.
Код: Выделить весь код
@Echo Off
cls

Set Where=D:\Директория поиска
Set What=.exe .doc .xls .js .tif .ююю

Set W=%What:.=*.%

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

cd /D "%Where%"
Set First=Папка указана неверно
Set Second=%First%
 
IF %ERRORLEVEL%==0 (
   Echo %Where%
   FOR %%e IN (%What%) DO (
       Set N=0
       FOR /F "usebackq tokens=*" %%m IN (`dir *%%e /s 2^>nul`) DO Set First=!Second! & Set Second=%%m & Set /A N=!N!+1
       If !N! GTR 4 (Echo *%%e  !First!) Else (Echo  *%%e  Файлы не найдены)
   )
   Set N=0
   FOR /F "usebackq tokens=*" %%s IN (`dir %W% /s 2^>nul`) DO Set First=!Second! & Set Second=%%s & Set /A N=!N!+1
   If !N! GTR 4 (Echo %W%  !First!) Else (Echo  %W%  Файлы не найдены)
) Else (
    Echo %Second%  %Where%
)
Pause

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 07-07-2012 в 15:07.


Отправлено: 15:01, 07-07-2012 | #14


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Вообще-то команда Dir возвращает Errorlevel=1 если файлы не найдены. Мне не удалось его поймать, когда Dir помещена в For. Может, кто-то подскажет? »
Возможно, поможет такая конструкция?
Код: Выделить весь код
For /F "delims=" %%A In ('Dir *.ext /B 2^>nul^|^|^(Echo Not found^&Set NotFound=1^)') Do (Echo %%A)

Отправлено: 15:15, 07-07-2012 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Подсчет обьема файлов определенного расширения и их удаление

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Удаление файлов заданного расширения Папуас Программное обеспечение Windows 11 25-02-2019 15:04
VBS/WSH/JS - [решено] Удаление файлов меньше определенного размера XXXp Скриптовые языки администрирования Windows 19 03-05-2012 15:12
CMD/BAT - [решено] Удаление каталогов не содержащих файлы определенного типа m3nthal Скриптовые языки администрирования Windows 2 15-01-2012 18:26
Восстановление удаленных файлов определенного расширения PhantomLo Хочу все знать 1 22-11-2010 21:38
[решено] Удаление всех файлов определенного формата Grub Хочу все знать 4 24-03-2006 12:27




 
Переход