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

Показать сообщение отдельно

Ветеран


Contributor


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

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


Цитата:
Нужно вычислить сумму размера всех файлов в каталоге "arch" и его подкаталогах.
Если надо получить итоговую сумму размеров файла каталога arch вместе с подкаталогами - вот вариант
Код: Выделить весь код
@Echo Off

Set "Where=G:\Games\"
Set "Out=%~dp0%~nx0.log"
Set "Arc=arch"

Del "%Out%" 2>Nul

SetLocal EnableExtensions EnableDelayedExpansion

For /F "Tokens=*" %%D In ('Dir "%Where%" /B /S /A:D 2^>nul') Do (
	If /I "%%~nxD"=="%Arc%" Call :Size "%%D"
)
GoTo :Eof

:Size

Set /A "Sum=0"
Set /A "SS=0"
FOR /F "tokens=1,2,3 usebackq" %%x IN (`Dir %1 /S /A 2^>nul`) DO (
	Set "Sum=                    !SS!"
	Set "SS=%%z"
)
Echo !Sum:~-19! %1 >>"%Out%"
Если надо получить размер файлов отдельно для каждого каталога внутри arch - вот вариант
Код: Выделить весь код
@Echo Off

Set "Where=G:\Games\"
Set "Out=%~dp0%~nx0.log"
Set "Arc=arch"

Del "%Out%" 2>Nul

SetLocal EnableExtensions EnableDelayedExpansion

For /F "Tokens=*" %%D In ('Dir "%Where%" /B /S /A:D 2^>nul') Do (
	If /I "%%~nxD"=="%Arc%" (
		Call :Size "%%D"
		For /F "Tokens=*" %%A In ('Dir "%%D" /B /S /A:D 2^>nul') Do Call :Size "%%A" 
	)
)
GoTo :Eof

:Size

Set /A "Sum=0"
Set /A "SS=0"
FOR /F "tokens=1,2,3 usebackq" %%x IN (`Dir %1 /A 2^>nul`) DO (
	Set "Sum=                    !SS!"
	Set "SS=%%z"
)
Echo !Sum:~-19! %1 >>"%Out%"
Подсчет суммы размеров файлов делает команда Dir, так как просто суммирование размеров будет работать, если эта сумма не более 2 147 483 647 байт

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


Последний раз редактировалось megaloman, 20-02-2015 в 10:30. Причина: Оптимизация

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

Отправлено: 11:49, 19-02-2015 | #4