Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
#1

Определить размер папки - CMD/BAT

07.01.2013, 14:44. Просмотров 10718. Ответов 42
Метки нет (Все метки)

 Комментарий модератора 
Сообщение выделено из темы:
http://www.cyberforum.ru/cmd-bat/thread645033.html


Спасибо всем! Получается!
Только я терь к другой немножко схеме подошёл , можно из этого кода выдрать токо то что считывает размер папки (с под папками) и выводит на экран?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 14:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить размер папки (CMD/BAT):

Посчитать размер папки
Есть код который по выбору показывает размер папки , но в нём какая то ошибка и...

Команда ROBOCOPY и размер папки
Как (если можно) в команде robocopy сделать чтобы вместо подробной инфы о всех...

Получить размер папки, за исключением некоторых файлов
Нужна помощь в отладке скрипта получения размера содержимого папки Temp, за...

Выполнить действие, если размер папки превышает 10 МБ
Здравствуйте !!! как в бат сделать такое если папка больше 10mb запуск файла не...

Подсчитать размер папки вместе с содержимым всех ее подпапок
Нужно написать .bat файл. Подсчитать размер папки вместе с содержимым всех ее...

Определить размер файла, и если этот размер меньше определенного, скопировать этот файл в другой каталог
Задача: определить размер файла по указанному пути, и если этот размер меньше...

42
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
07.01.2013, 17:08 #2
Цитата Сообщение от Dragokas Посмотреть сообщение
:GetFolderSize %1-Folder_Name %2-Var_Name.Size
в заглавии как-бы описание.

Bash
1
2
3
4
5
@echo off
Set folder=c:\temp
Call :GetFolderSize "%folder%" Size
Echo Size=%Size% Bytes
pause
Расширенный пример этой функции с выводом на экран разбивки на Кб и Мб есть здесь: http://www.cyberforum.ru/cmd-bat/thread672170.html#post3962046
1
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
07.01.2013, 17:35  [ТС] #3
Короче
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo Off
SetLocal enabledelayedexpansion
Set /p D=?
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%D%" /-C /S /A:-D') Do (
If !flag!==1 Set dirsize=%%c
If "%%b"=="файлов:" (Set flag=1) else (Set flag=0)
)
Set /a dirsizeT=dirsize+0
If Not "%dirsizeT%"=="%dirsize%" Echo Число %dirsize% слишком велико для обработки в CMD&Pause>nul&Exit
Set kb=1024
Set /a mb=kb*kb, gb=kb*kb*kb, dirsizeMB=dirsize/mb, ostMB=dirsize%%mb*100/mb
Rem Set /a dirsizeGB=dirsize/gb, ostGB=dirsize%%gb*10/gb
Echo %dirsizeMB%,%ostMB% МБ
Rem Echo %dirsizeGB%,%ostGB% ГБ
Pause>nul
И терь осталось какбы он не говорил мне что "Echo Число слишком велико для обработки в CMD" сделать...
0
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
07.01.2013, 21:13 #4
Озвучьте, пожалуйста, полностью задание.

Размер папки в байтах Вы получили - это переменная dirsize, начиная со строки № 8.
Остальное по сути лишнее.
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
07.01.2013, 22:42  [ТС] #5
Полностью дак полностью:
У меня есть длинный код
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
for /f "skip=4 tokens=1-3" %%a in ('Dir "%p%" /-C /S 2^>nul') do (
set pap=%%~na
If !flag!==1 set dirsize=%%c& set nn=%%a
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0))
set Cnt=!dirsize!
Call:UDIV2 %Cnt% dirsizeMB  20
Call:UMUL2 %dirsizeMB% CntT 20
Call:SUM %Cnt% -%CntT% ost
Set/a $.mb=(%ost%*100)/(1024*1024)
Set "$.mb=0%$.mb%"& Set "$.mb=!$.mb:~-2!"
if errorlevel 6 (
cls
echo.
echo                             Информация GTA IV
echo  Размер %dirsizeMB%,%$.mb% Мб
echo  Установлена по пути:
echo  %u%
goto usmd
)
cls
echo.
echo                                   Установка
echo.
echo   Найдено !nn! файлов, размер которых %dirsizeMB%,%$.mb% Мб
echo.
echo   Начать установку
echo   Удаление мода
echo   Назад
choice /C 123 /N
if errorlevel 3 goto re
if errorlevel 2 goto ud
if errorlevel 1 goto set
:SUM  %uint%  %uint%  %VarRes%
(set "$a=%~1"& set "$b=%~2"
if "!$a:~,1!"=="-" (set "$az=-"&set "$a=!$a:-=!") else set "$az="
if "!$b:~,1!"=="-" (set "$bz=-"&set "$b=!$b:-=!") else set "$bz="
for /f "tokens=* delims=0" %%i in ("!$a:~-9!") do set/a "$al=%%i+0"&set/a "$ah=!$a:~,-9!+0"
for /f "tokens=* delims=0" %%i in ("!$b:~-9!") do set/a "$bl=%%i+0"&set/a "$bh=!$b:~,-9!+0"
set/a "$sl=(!$az!!$al!)+(!$bz!!$bl!)"&set/a $p=!$sl:~,-9!+0&set/a "$sl=!$sl!-(!$p!000000000)"
set/a "$sh=(!$az!!$ah!)+(!$bz!!$bh!)+(!$p!+0)"
if !$sh! gtr 0 if !$sl! lss 0 set/a $sh-=1& set/a "$sl=(1000000000+!$sl!)"
if !$sh! lss 0 if !$sl! gtr 0 set/a $sh+=1& set/a "$sl=(!$sl!-1000000000)"
for /f "delims=0123456789" %%i in ("!$sh!!$sl!") do set "$z=%%i"
if !$sh! equ 0 if !$sl! equ 0 set "$z=0"
set "$sl=00000000!$sl:-=!")
for /f "tokens=* delims=0" %%i in ("!$sh:-=!!$sl:~-9!") do ENDLOCAL& set "%~3=%$z%%%i"
GoTo:EOF
:UDIV2  %uint% %VarRes% %uint%
(set "$a=%~1"& set/a "$c=%~3+0"& if !$c! equ 0 set "$c=1"
for /f "tokens=* delims=0" %%i in ("!$a:~-9!") do set/a "$al=%%i+0,$ah=!$a:~,-9!+0"
for /l %%i in (1,1,!$c!) do (
set/a "$p=$ah&1,$ah>>=1,$al>>=1"
if !$p!==1 set/a $al=$al+500000000)
set "$z="& if !$ah! equ 0 if !$al! equ 0 set "$z=0")
for /f "tokens=* delims=0" %%i in ("!$ah!!$al!") do ENDLOCAL& set "%~2=%$z%%%i"
GoTo:EOF
:UMUL2  %uint% %VarRes% %uint%
(set %~2=%~1& set/a "$c=%~3+0"& if !$c! equ 0 set "$c=1"
for /l %%i in (1,1,!$c!) do Call:SUM !%~2! !%~2! %~2
for /f %%i in ("!%~2!") do ENDLOCAL& set "%~2=%%i")
GoTo:EOF
+ Этот
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Echo Off
SetLocal enabledelayedexpansion
Set /p D=?
cls
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%D%" /-C /S /A:-D') Do (
If !flag!==1 Set dirsize=%%c
If "%%b"=="файлов:" (Set flag=1) else (Set flag=0)
)
Set /a dirsizeT=dirsize+0
If Not "%dirsizeT%"=="%dirsize%" Echo Число %dirsize% слишком велико для обработки в CMD&Pause>nul
Set kb=1024
Set /a mb=kb*kb, gb=kb*kb*kb, dirsizeMB=dirsize/mb, ostMB=dirsize%%mb*100/mb
Rem Set /a dirsizeGB=dirsize/gb, ostGB=dirsize%%gb*10/gb
Echo %dirsizeMB%,%ostMB% МБ
Rem Echo %dirsizeGB%,%ostGB% ГБ
Pause>nul
Первый всё делает ,но он большущий , я думал если бы написать более мелкий но с той-же функцией!
Второй хоть и подсчитывает ,но если число превысит фиг знает какое значение , то он пишет мне ту фигню...
Вы умный и может сможете мне помочь?
0
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
08.01.2013, 02:58 #6
Кхм.
Нет, не на столько, как бы хотелось )

Я так понял Вам нужно, чтобы ответ писало в МегаБайтах, но при этом математика не выдавала ошибок.

(*немного почесав голову*)

Так достаточно коротко: ?
Bash
1
2
3
4
5
6
7
@Echo Off
SetLocal enabledelayedexpansion
Set D=l:\Bash
For /F "tokens=1-3" %%a IN ('Dir "%D%" /-C/S/A:-D') Do Set DirSize=!n2!& Set n2=%%c
Set DirSize=%DirSize:~0,-6%
Echo Size of %D% is %DirSize% MB.
pause
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
08.01.2013, 12:06  [ТС] #7
Цитата Сообщение от Dragokas Посмотреть сообщение
достаточно коротко: ?
О Господи ну наконец то! Спасибо огромное вам!!! , Всё решено! , мелкий вопросик (так просто):
Вот когда тыкаешь на свойства папки и видишь размер ,то он показывает
Размер: 8,00 ГБ (8 596 143 292 байт)
На диске: 8,00 ГБ (8 599 232 512 байт)
Чё он сначала говорит что размер 8 ГБ ,а тут же пишет 8,5 ГБ ? (и ваш код как раз размер который в скобках считает...)
0
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
08.01.2013, 12:40 #8
Код
1 Кб = 1024Байта
1 Мб = 1024*1024=1048576 Байт
1 Гб = 1048576*1024=1073741824 Байт
8 596 143 292 Байт = 8 596 143 292 / 1073741824 =  8,005 Гб
Всё. Просто занимательная информатика.
0
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
08.01.2013, 12:52 #9
Лучший ответ Сообщение было отмечено Joey как решение

Решение

Вам вроде как хотелось по-короче.
Ну если нужно и с сотыми, тогда так:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Echo Off
SetLocal enabledelayedexpansion
Set D=l:\Bash
For /F "tokens=1-3" %%a IN ('Dir "%D%" /-C/S/A:-D') Do Set DirSize=!n2!& Set n2=%%c
CAll :var_count "%DirSize%" VarC
Set /A VarC-=6
if %VarC% LEQ 0 (Set DirSizeMB=0) else (Set DirSizeMB=%DirSize:~0,-6%)
if %VarC% GEQ 1 Set DirSizeMB=%DirSizeMB%,!DirSize:~%VarC%,2!
Echo Size of %D% is %DirSizeMB% MB.
pause& Goto :eof
 
:var_count %1-Var.Value %2-Var.Count.Result
::Определяет длину переменной
set var=%~1
if not defined var exit /b
set var=%var:~1%
set /a %~2+=1
call :var_count "%var%" %~2
exit /b
1
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
08.01.2013, 13:08 #10
В смысле? Я просто пример привёл, почему 8 596 143 292 Байт это 8 Гб и всё.
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
08.01.2013, 13:49  [ТС] #11
Цитата Сообщение от Dragokas Посмотреть сообщение
нужно и с сотыми
Да нееее! Всё норм , FraidZZ - уже дал ответ , меня щас интересует как сделать чтоб он исключал папки "backup" и "mod"
0
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
08.01.2013, 13:56 #12
Отрывок кода приведи, где нужно исключение
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
08.01.2013, 14:47  [ТС] #13
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
set p=%u%
 
:sco
For /F "tokens=1-3" %%a IN ('Dir "%p%" /-C/S/A:-D') Do Set DirSize=!n2!& Set n2=%%c
Set DirSize=%DirSize:~0,-6%
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%p%" /-C /S /A:-D^|find /I "файлов"') Do (
set fi=%%a
)
if errorlevel 6 (
cls
echo.
echo                             Информация GTA IV
echo  Размер %DirSize% MB
echo  Установлена по пути:
echo  %u%
goto usmd
)
Значит: Сначала ставит что п=у (у в данном случае является путём в реестре к каталогу) ,потом показывает размер папки (%u%)
Вот во время этого подсчёта он должен исключать папки "mod" и "backup"

Добавлено через 7 минут
А можно ещё сделать чтобы он считал в другом формате как
тут расписано?
0
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
08.01.2013, 16:09 #14
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
set p=%u%
 
:sco
attrib -R * /S /D
attrib +R mod
attrib +R backup
For /F "tokens=1-3" %%a IN ('Dir "%p%" /-C/S/A:-D-R') Do Set DirSize=!n2!& Set n2=%%c
Set DirSize=%DirSize:~0,-6%
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%p%" /-C /S /A:-D-R^|find /I "файлов"') Do (
set fi=%%a
)
attrib -R * /S /D
if errorlevel 6 (
cls
echo.
echo                             Информация GTA IV
echo  Размер %DirSize% MB
echo  Установлена по пути:
echo  %u%
goto usmd
)
Добавил команды attrib. А также внимательно сравни мою 7ую строчку с 4ой твоей, а также 9ую с 6ой.

Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
А можно ещё сделать чтобы он считал в другом формате как
тут расписано?
Так это же вроде Dragokas сделал.
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
08.01.2013, 21:13  [ТС] #15
Dragokas сделал
Не знаю... , в общем тут так я вырезки из кода тогда приводил и по этому полностью код работает не корректно...
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Set b=backup
Set m=mod
 
(Всякие коды...)
 
:gtada
cls
echo.
echo  Пожалуйста подождите...
set p=%u%
goto sco
 
(Всякие коды...)
 
:yefi
cls
echo.
echo                                   Установка
echo.
echo   Идёт подсчёт файлов и их размера...
set p=%u%\%m%
:sco
attrib -R * /S /D
if exist %u%\%m% attrib +R mod
if exist %u%\%b% attrib +R backup
For /F "tokens=1-3" %%a IN ('Dir "%p%" /-C/S/A:-D-R') Do Set DirSize=!n2!& Set n2=%%c
Set DirSize=%DirSize:~0,-6%
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%p%" /-C /S /A:-D-R^|find /I "файлов"') Do (
set fi=%%a
attrib -R * /S /D
)
if errorlevel 6 (
cls
echo.
echo                             Информация GTA IV
echo  Размер %DirSize% MB
echo  Установлена по пути:
echo  %u%
goto usmd
)
cls
echo.
echo                                   Установка
echo.
echo   Найдено !fi! файлов, размер которых %DirSize% MB
echo.
echo   Начать установку
echo   Удаление мода
echo   Назад
choice /C 123 /N
if errorlevel 3 goto re
if errorlevel 2 goto ud
if errorlevel 1 goto set
:nofi
color 74
echo.
echo   Папка с модами не найдена
goto m
Когда в "главном меню" выбираю "установку" (errorlevel 2) , он мне на пол секунды показывает "переустановка атрибутов скрытого файла F:\b\dektop.ini не произведена" а потом показывает всё правильно... (строка 42-49) , но когда я в "главном меню" выбираю "инфо" (errorlevel 6) он мне это-же самое показывает (строка 42-49) , а мне надо чтобы при выборе "инфо" (errorlevel 6) он показывал (сторки 34-39)

Добавлено через 2 часа 9 минут
Да и ваще , тщательно по смотря я понял что он как-то не правильно показывает размер папки ,когда исключает те две...
0
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
08.01.2013, 21:27 #16
Хм, странно о_0
Я по сути добавил к тем папкам атрибут "Только чтение", а затем запретил считать файлы с этим атрибутом команде 'dir'. После чего снял этот атрибут. Странно.
0
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
08.01.2013, 21:42 #17
Jeka_Osokin, все не читал. Но ошибка "переустановка атрибутов не произведена"
бывает по 2 причинам.

1) не может получить доступ к файлу (заблокирован приложением или не хватает прав)
2) файл является скрытым или системным, тогда нужно указывать не просто -R, а -S -H -R
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
09.01.2013, 01:43  [ТС] #18
Цитата Сообщение от FraidZZ Посмотреть сообщение
Хм, странно о_0
Не знаю не знаю....
Цитата Сообщение от Dragokas Посмотреть сообщение
бывает по 2 причинам
1 доступ к файлу быть и не может , потому что файла то и нету!
2 по идее он есть токо на рабочем столе и он скрытный , но код думает что он в этой папке...
0
Dragokas
Эксперт WindowsАвтор FAQ
16926 / 7011 / 851
Регистрация: 25.12.2011
Сообщений: 10,808
Записей в блоге: 16
09.01.2013, 01:53 #19
Позвольте спросить. Вот здесь Вы что пытаетесь сделать
и имеет ли это прямое отношение к названию данной темы?
Может стоит перенести в новую тему, дав определенное название.
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Bash
1
2
3
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%p%" /-C /S /A:-D-R^|find /I "файлов"') Do (
set fi=%%a
attrib -R * /S /D
)
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
12.01.2013, 18:18  [ТС] #20
Цитата Сообщение от Dragokas Посмотреть сообщение
Вот здесь Вы что пытаетесь сделать
Извиняюсь , попало просто под общий код , там определяется сколько файлов в папке , это не имеет отношение к данному вопросу , но главное то как заставить его не считать размер папки backup и mod?
0
12.01.2013, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 18:18
Привет! Вот еще темы с решениями:

Создать батник, при запуске которого будет показываться размер папок и файлов текущей папки
Всем привет!:) Пришла на форум за помощью. Я новичок%-) Мне нужно создать...

Определить размер файла
Пишу скрипт удаления временных файлов. Нужна подсказка в определении размера...

Как определить символ (например точку) в имени папки
Добрый день! Получилась такая задача у меня. Папка (на входе) может иметь в...

Сделать задержку, размер которой определить по названию файла
Здравствуйте, вроде знаю как делать простую задержку, но вот как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru