Подсчет обьема файлов определенного расширения и их удаление
Здравствуйте! Пишу программу для чистки диска, но не могу решить одну проблему - мне необходимо найти файлы с расширением, например: *.old, удалить их, но при этом посчитать суммарный обьем удаленных файлов. Так проделать для нескольких расширений, а потом выдать обьем очищенного места на ЖД.
С удалением файлов я разобрался, а вот как посчитать общий обьем, не знаю. Помогите! Буду благодарен! |
Код:
@Echo Off |
Спасибо, конечно же за ответ. Но почему-то у меня данный скрипт не работает: просто не находит файлы. Пробовал указывать директорию, в которой, например, есть log-файлы, причем в переменную ставил .log
Просто выдает "Для продолжения нажмите на любую клавишу". |
ilyadud, попробуйте так
Код:
@Echo Off Код:
@echo off |
sov44, у вас путь в dir раскрывается примерно таким образом:
Код:
Dir "%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default"\"Current Session";"History";"History Index *-*";"Last Session";"Visited Links";"Archived History"; /S/B/A:-D 2>nul Код:
@Echo Off |
sov44, ИМХО, Ваш способ суммирования в бат-файле опасен - при больших значениях (точно сейчас не упомню каких) батник суммировать не будет, именно поэтому я пытаюсь пользоваться результатами команды Dir (кстати, ИМХО, это быстрее получится, хотя и в ущерб универсальности для рус-англ систем)
Цитата:
ilyadud, я подправил последнюю строку скрипта для информативности. 1. Возможно Вы неверно задали папку. Попробуйте, например, C:\ 2. Возможно, батник набран не в 866 кодировке - проверьте, это существенно, так как анализируется наличие слова байт 3. Возможно, у Вас вовсе не русифицированное сообщение команды dir - сделайте, например, Dir c:\ >C:\aaa Содержимое файла ааа хотелось бы увидеть. Придётся заменить слово байт на англ аналог. У меня сделан только подсчет размеров, удаление надо произвести после этого. |
Всем спасибо!
|
megaloman, к сожалению не понял Вашего кода и не смог применить к своему коду (первый код поста 4). Если не затруднит, добавьте пояснения в свой код. Интересно попробовать и сравнить быстродействие кодов :)
|
sov44, возможно, коллега megaloman имеет в виду вот это:
Код:
C:\>Set /A 3992768760+1 |
Цитата:
|
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 в текущей директории для всех поддиректорий. В постановке задачи было Цитата:
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Гига. |
sov44, По мотивам Вашего скрипта написал свой, начал сомневаться, что быстрее работает :sorry:
Код:
@Echo Off |
Цитата:
|
Переписал свой батник аккуратнее, чтобы не быть привязанным к языку выдачи команды Dir (слово байт больше не ловлю, анализирую кол-во строк в выдаче Dir)
Вообще-то команда Dir возвращает Errorlevel=1 если файлы не найдены. Мне не удалось его поймать, когда Dir помещена в For. Может, кто-то подскажет? Было бы существенно лучше. Код:
@Echo Off |
Цитата:
Код:
For /F "delims=" %%A In ('Dir *.ext /B 2^>nul^|^|^(Echo Not found^&Set NotFound=1^)') Do (Echo %%A) |
Время: 01:29. |
Время: 01:29.
© OSzone.net 2001-