Цитата:
Нужно вычислить сумму размера всех файлов в каталоге "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 байт