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

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

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

Аватара для ilyadud

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


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

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


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

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

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

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

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls

Set Where=F:\Директория
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 (
       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!
   )
   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!
)

If "%Second%"=="Папка указана неверно" Echo %Second%  %Where%
Pause

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


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


Отправлено: 13:31, 05-07-2012 | #2



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

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


Аватара для ilyadud

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


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

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


Спасибо, конечно же за ответ. Но почему-то у меня данный скрипт не работает: просто не находит файлы. Пробовал указывать директорию, в которой, например, есть log-файлы, причем в переменную ставил .log

Просто выдает "Для продолжения нажмите на любую клавишу".

-------
Руководитель NADevs Group


Отправлено: 09:59, 06-07-2012 | #3


Ветеран


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

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


ilyadud, попробуйте так
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
set iSumL=0
set Rash=*.log;*.old;*.bak;*.temp;*.tmp;*.---;*._mp;*.syd;
  For /F "Delims=" %%I In ('Dir c:\%Rash% /B/S/A:-D-H 2^>nul') Do (
      2>&1 del /q "%%I" | 1>nul findstr "."
      if errorlevel 1 (set /a iSumL +=%%~zI)
)
Echo !iSumL!
pause
У меня встречный вопрос к знатокам. Переменная %Rash% не переходит к следующему значению. В чём ошибка?
Код: Выделить весь код
@echo off
SetLocal enabledelayedexpansion
set iSumG=0
set DRG="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default"
set Rash="Current Session";"History";"History Index *-*";"Last Session";"Visited Links";"Archived History";
  For /F "Delims=" %%I In ('Dir %DRG%\%Rash% /S/B/A:-D 2^>nul') Do (
       set /a iSumG +=%%~zI      
       del /q "%%I" 2>nul
      )
Set /A Cnt +=!iSumG!
echo %Cnt%
pause

Последний раз редактировалось sov44, 06-07-2012 в 10:42.

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

Отправлено: 10:31, 06-07-2012 | #4


Старожил


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

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


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
И получается, что остальные директории кроме самой первой в %Rash%, отделённые ";" вы ищете в текущей, рабочей директории - где их естественно, нету. Для правильного разбора и подстановки попробуйте использовать этот фрагмент - по сути, это эмуляция For %%A In (xxx), только с заданием произвольного разделителя.
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
set DRG="%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default"
set Rash="Current Session";"History";"History Index *-*";"Last Session";"Visited Links";"Archived History";
:Jmp
For /F "tokens=1,* delims=;" %%A In ("!Rash!") Do (
	If Not "%%A"=="" (
		For /F "Delims=" %%I In ('Dir %DRG%\%%A /S/B/A:-D 2^>nul') Do (
			Echo %%I
		)
		Set Rash=%%B&GoTo Jmp
	)
)
Pause>Nul
Это сообщение посчитали полезным следующие участники:

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


Ветеран


Contributor


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

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


sov44, ИМХО, Ваш способ суммирования в бат-файле опасен - при больших значениях (точно сейчас не упомню каких) батник суммировать не будет, именно поэтому я пытаюсь пользоваться результатами команды Dir (кстати, ИМХО, это быстрее получится, хотя и в ущерб универсальности для рус-англ систем)
Цитата:
Переменная %Rash% не переходит к следующему значению.
- я это решил посредством смены текущей папки с помощью cd /D для нужной папки. Далее в Dir работаю в текущей папке.

ilyadud, я подправил последнюю строку скрипта для информативности.
1. Возможно Вы неверно задали папку. Попробуйте, например, C:\
2. Возможно, батник набран не в 866 кодировке - проверьте, это существенно, так как анализируется наличие слова байт
3. Возможно, у Вас вовсе не русифицированное сообщение команды dir - сделайте, например, Dir c:\ >C:\aaa
Содержимое файла ааа хотелось бы увидеть. Придётся заменить слово байт на англ аналог.

У меня сделан только подсчет размеров, удаление надо произвести после этого.

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


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


Отправлено: 13:04, 06-07-2012 | #6


Аватара для ilyadud

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


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

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


Всем спасибо!

-------
Руководитель NADevs Group


Отправлено: 13:19, 06-07-2012 | #7


Ветеран


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

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


megaloman, к сожалению не понял Вашего кода и не смог применить к своему коду (первый код поста 4). Если не затруднит, добавьте пояснения в свой код. Интересно попробовать и сравнить быстродействие кодов

Отправлено: 18:08, 06-07-2012 | #8


Старожил


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

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


sov44, возможно, коллега megaloman имеет в виду вот это:
Код: Выделить весь код
C:\>Set /A 3992768760+1
-302198535

C:\>Set /A 9992768760+1
Неверное число. Числа ограничены 32 битами точности.
При определённых, слишком больших значениях - происходит переполнение переменной и результат уходит в минус, либо выдается сообщение о ошибке.

Отправлено: 18:24, 06-07-2012 | #9


Ветеран


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

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


Цитата Anonymоus:
При определённых, слишком больших значениях - происходит переполнение переменной и результат уходит в минус, »
Логов и темпов набрать на два гига, это надо постараться (2^30 - 1 = 2147483647 "2048 Mb." ) Скрипт очистки будет запускаться как минимум раз в месяц, столько не насобирается. Но это всё детали. Интересен сам факт возможного увеличения быстродействия.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:37, 06-07-2012 | #10



Компьютерный форум 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




 
Переход