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

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

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

Пользователь


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

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


Доброго времени!
Необходимо в каталоге, который задан первым параметром, а также в его подкаталогах определить суммарный объем всех файлов, расширение которых задано вторым параметром.

За основу я взял текст программы, который был составлен тут:

Код: Выделить весь код
@Echo Off
Set MyDir=C:\lab1\wingraf
Set Ras=.gif
Set Size = 0

Call :_subdir "%MyDir%"
Echo.
Echo All subdirs = %SubDirs%
Pause>Nul
Exit

:_subdir
For /D %%s In ("%~1\*") Do (
	if not %~Xa neq *.gif DO (
		%size% += %~Za )
	Echo %%s > nul
	Call :_subdir "%%~s"
)
GoTo :EOF
Но, как я понял, что-то я напутал в именах переменных в подпрограмме...

Отправлено: 21:07, 29-04-2013

 

Ветеран


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

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


Я всё ждал, кто ж догадается использовать. В ожиданиях не ошибся . gora, а откуда там «0xff» берётся?

Отправлено: 15:36, 30-04-2013 | #11



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

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


Аватара для gora

Ушёл из жизни


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

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


Цитата Iska:
откуда там «0xff» берётся? »
Из вывода Dir, она табулирует триады цифр этим символом.

Отправлено: 15:55, 30-04-2013 | #12


Старожил


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

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


разделитель отключается
Код: Выделить весь код
Dir /-C
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:20, 30-04-2013 | #13


Ветеран


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

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


У меня разделителем — обычная запятая (0x2c):
Код: Выделить весь код
000000000000:  8E A1 E9 A8│A9 20 E0 A0│A7 AC A5 E0│20 A2 E1 A5  Общий размер все
000000000010:  E5 20 E4 A0│A9 AB AE A2│20 3D 20 32│39 31 2C 34  х файлов = 291,4
000000000020:  32 32 20 A1│A0 A9 E2 20│A1 A0 A9 E2│0D 0A        22 байт байт♪◙
А… Кажись, понял: зависит от региональных настроек, наверное.

Отправлено: 17:23, 30-04-2013 | #14


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
Set What=D:\Delete\*.mp3

SetLocal EnableExtensions EnableDelayedExpansion

Set /A Log=0
Set S1=
Set S2=

FOR /F "usebackq tokens=3" %%i IN (`dir "%What%" /S /-C 2^>nul`) DO (
	Set S2=!S1!
	Set S1=%%i
	Set /A Log=!Log!+1
)
If Not %Log% GTR 3 Set /A S2=0

Echo %S2%
Не берусь судить об универсальности предложенного, проверял на том, что оказалось под рукой: на русской Win 7, XP и английской 2008

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

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

Отправлено: 20:20, 30-04-2013 | #15


Ветеран


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

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


Про dir /-c совсем забыл

Можно немного изменить:
Код: Выделить весь код
@echo off
setlocal

for /f "tokens=3" %%i in (' "dir /s /-c Folder\*.ext | findstr /v "[A-Z:]" | sort" ') do set "size=%%i"
echo %size%
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:21, 01-05-2013 | #16


Ветеран


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

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


Ноу-хау! Если cmd.exe не может подсчитывать гигабайтные размеры в байтах, то Robocopy.exe это спокойно делает:

Код: Выделить весь код
@ECHO OFF
FOR /F "tokens=3" %%I IN ('ROBOCOPY Folder Folder *.avi /L /NFL /NDL /NJH /BYTES /S^|FINDSTR "Ѓ*©в"') DO ECHO %%I
PAUSE>nul
Folder - полный путь к папке, в которой надо подсчитать суммарный размер файлов с заданным расширением (в примере - *.avi). "Folder" повторено два раза, т. к. происходит условное копирование папки самой на себя.

/L - параметр составления списка вместо реального копирования.

/NFL /NDL - сам список файлов и папок не показывается.

/NJH - не выводится заголовок задания.

/BYTES - вывод размера в байтах (по умолчанию размер выводится в зависимости от "масштабности" результата - в байтах, килобайтах, мегабайтах, гигабайтах...).

/S - учитываются все подкаталоги.

Ѓ*©в - слово "Байт" в DOS (* - неотображающийся символ).

Последний раз редактировалось Georgio, 02-05-2013 в 22:32.

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

Отправлено: 20:55, 02-05-2013 | #17



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Определение объема трафика drekhaker Скриптовые языки администрирования Windows 3 31-08-2012 14:23
CMD/BAT - [решено] Выбор определенного типа файлов при копировании Aleksander.Ruban@fb Скриптовые языки администрирования Windows 4 25-08-2012 10:21
CMD/BAT - Нахождение суммарного объема файлов XFNeo Скриптовые языки администрирования Windows 5 11-12-2011 15:56
Log/Monitoring - Запрет на запись файлов определенного типа и размера andrei.ru Сетевые технологии 1 20-11-2009 11:53
скачивание файлов определенного типа NIGHT_ANGEL Хочу все знать 11 25-02-2005 06:41




 
Переход