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

Определить размер папки

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

 Комментарий модератора 
Сообщение выделено из темы:
Команда ROBOCOPY и размер папки


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

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

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

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

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

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

42
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
12.01.2013, 19:19 21
Я к тому что эта конструкция лишена смысла. Лучше опишите детально и по порядку что требуется.
Вижу у Вас с разных тем объединять код не очень то и получается.

По поводу папки backup и mod -
1) можно просто временно перенести эти папки в другое место, тогда они не попадут под общий счет числа байтов;
2) можно подсчитывать (и затем суммировать через строковую арифметику) размер каждого подкаталога, кроме этих двух.
0
Eva Rosalene
Ladybug
4052 / 1591 / 303
Регистрация: 06.01.2013
Сообщений: 4,188
Завершенные тесты: 2
12.01.2013, 22:10 22
Можно подсчитать весь размер, и вычесть из него размер этих двух, так легче
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
13.01.2013, 00:07 23
FraidZZ, одинаково сложно. Ведь в обоих случаях придется прибегать к строковой математике.
Общий размер папки то у ТС выходит за пределы числового типа для CMD.

Нет, мы конечно можем сразу урезать строки с числами при сложении, но это так сказать совсем способ не комильфо (правда, зато именно как Jeka_Osokin и хотел - самый короткий код ).
Но а вообще с арифметикой строк хоть и встречался, ни разу не работал и не разбирал ее. Может, там все и просто реализовать, особенно, если на рекурсии придумать (будет нечто похожее, что Вы, FraidZZ делали при привышении граничного времени (только отдельно для каждого из разрядов).
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
13.01.2013, 15:41  [ТС] 24
Цитата Сообщение от Dragokas Посмотреть сообщение
временно перенести
Ак они по 10-20 гигов весят! Пока это всё переносить... , там как-бы не комфортно
Цитата Сообщение от Dragokas Посмотреть сообщение
через строковую арифметику
Чё-то я ваще это в первый раз слышу...
Цитата Сообщение от FraidZZ Посмотреть сообщение
и вычесть из него размер этих двух
Как?
Цитата Сообщение от Dragokas Посмотреть сообщение
конструкция лишена смысла
Цитата Сообщение от Dragokas Посмотреть сообщение
объединять код не очень то и получается
Ну извините , я как-бы новичок и не много путаюсь...
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
13.01.2013, 15:56 25
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Ак они по 10-20 гигов весят! Пока это всё переносить... , там как-бы не комфортно
Правый клик - "Переименовать" - сколько времени занимает? - То-то.

Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Ну извините , я как-бы новичок и не много путаюсь...
Я к тому, что может Вам все таки стоит все собрать в одну тему и попросить поправить детально расписанное Вами полное задание.

Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Чё-то я ваще это в первый раз слышу...
И я тоже.
Но попробовать можно =). Просто у Вас жесткое ограничение - писать как можно меньше кода. А это как раз идет в разрез. Поэтому пока сильно желанием не горю. Скажете опять - "почему так много кода". Хотя я наперед не знаю, как получится.
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
13.01.2013, 18:09  [ТС] 26
Цитата Сообщение от Dragokas Посмотреть сообщение
сколько времени занимает?
Там как-бы всё автоматизировано через командную строку...
Цитата Сообщение от Dragokas Посмотреть сообщение
попросить поправить
И какие мне тогда темы объединить?
Цитата Сообщение от Dragokas Посмотреть сообщение
Скажете опять
Не чё! Пофиг , пусть главное работает , а там посмотрим может можно укоротить...
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
13.01.2013, 18:18 27
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Там как-бы всё автоматизировано через командную строку...
Разве командная строка не умеет делать тоже что и F2.
Когда переносишь увесистую папку в другое место на том же диске проходит максимум секунда (большая часть времени уйдет на прорисовку анимации, если это делать эксплорером .
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
И какие мне тогда темы объединить?
Думаю, никакие. Прочитайте еще раз что я написал. Нужно продумать и внимательно расписать по пунктам целиком Вашу задачу, а потом создать новую тему (если к ее частям есть решения - указать ссылку на них).
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
Не чё! Пофиг , пусть главное работает , а там посмотрим может можно укоротить...
Попросил у хорошего человека код на другом языке. Если он у него на рекурсии, то сделаем совсем короткий код.
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
13.01.2013, 19:45  [ТС] 28
Цитата Сообщение от Dragokas Посмотреть сообщение
Попросил у хорошего человека
Понятно , ждёмс...
Цитата Сообщение от Dragokas Посмотреть сообщение
проходит максимум секунда
Не получится Там когда размер определяется он затем переходит к показу размера папки mod или если выбран "errorlevel 6" то он определяет размер полной папки , так что если перед определением размера временно переносить папки mod и backup то при определении полного размера он будет писать меньше... (не знаю понятно ли я написал ) , ну короче посмотрим чё там ваш чел представит...
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
13.01.2013, 20:52 29
Цитата Сообщение от Jeka_Osokin Посмотреть сообщение
то при определении полного размера он будет писать меньше...
Перенести папки обратно перед определением полного размера вера не позволяет?
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
13.01.2013, 23:17  [ТС] 30
Перенести папки обратно перед определением полного размера
Попробовал...
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
:gtada
set p=%u%
cd..
if exist "%~dp0"\mod move "%~dp0"\mod %cd%
if exist "%~dp0"\backup move "%~dp0"\backup %cd%
cd "%~dp0"
cls
echo.
echo  Пожалуйста подождите...
goto sco
 
:yefi
cls
echo.
echo                                   Установка
echo.
echo   Идёт подсчёт файлов и их размера...
set p=%u%\%m%
: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 (
cd..
if exist "%~dp0"\mod move %cd% "%~dp0"\mod
if exist "%~dp0"\backup move %cd% "%~dp0"\backup
cd "%~dp0"
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
Вроде всё норм токо он всегда открывает (хоть выбрал хоть не выбрал errorlevel 6) только "установка" где размер и количество , а надо чтобы
если выбрал errorlevel 6 то открывал инфу о ГТА 4... вот...
P. S. зайду токо сёдне днём...
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
16.01.2013, 21:09  [ТС] 31
Чё там как оно...?
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
16.01.2013, 22:03 32
Каким образом Вы можете выбрать Errorlevel 6.
Прокомментируйте немного Ваш код - что откуда должно переходить.
Странные переходы. Я вообще Goto не советую пользоваться. Это плохой стиль программирования.
Пишите метку, код подпрограммы, Exit /B
Если туда нужно перейти - Call :metka
Если нужно выйти из программы - Goto :eof или Exit /B
0
Jeka_Osokin
11 / 11 / 1
Регистрация: 31.08.2012
Сообщений: 110
19.01.2013, 09:25  [ТС] 33
"Главное меню"
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
:re
cd %~dp0
cls
setlocal enabledelayedexpansion
color 70
title v0.546 Время %time%
if not exist %u%\installmod.bat echo.& echo  Программа должна находится в папке с игрой (%u%)
echo.
echo  Russinan
echo  Установка
echo  Фиксация
echo  Запуск GTA IV
echo  Расположение
echo  Бэкап
echo  Инфо
echo  Выход
choice /C 12345678 /N
if errorlevel 8 exit
if errorlevel 7 goto i
if errorlevel 6 goto cb
if errorlevel 5 goto rs
if errorlevel 4 goto r
if errorlevel 3 goto fix
if errorlevel 2 goto in
if errorlevel 1 goto ru
Я там новый пункт добавил так что терь это не 6 ,а 7!
Там выбираешь 7 и переходит сюды:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
:i
title Информация
if exist %u% goto gtada
cls
echo.
echo  GTA IV не установлена
goto pk
:gtada
cd..
if exist %~dp0mod move %~dp0mod %cd%
if exist %~dp0backup move %~dp0backup %cd%
cd %~dp0
cls
echo.
echo  Пожалуйста подождите...
set p=%u%
goto sco
А выбираешь 2 то идёт сюда:
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
:In
cd %~dp0
title Установка
cls
If not Exist "%m%\*.*" goto nofi
:yefi
cls
echo.
echo                                   Установка
echo.
echo   Идёт подсчёт файлов и их размера...
set p=%u%\%m%
: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 (
cd..
if exist %~dp0mod move %~dp0mod %cd%
if exist %~dp0backup move %~dp0backup %cd%
cd %~dp0
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
А чем лучше "call"?
0
Eva Rosalene
Ladybug
4052 / 1591 / 303
Регистрация: 06.01.2013
Сообщений: 4,188
Завершенные тесты: 2
22.01.2013, 15:14 34
Call какой бы создаёт подфункцию в программе, а гото - просто переход по метке. Использование гото считается плохим стилем.
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
22.01.2013, 18:22 35
Goto (безусловный переход) вообще не существует как таковой в нек. современных языках.
Call и подпрограммы, функции (классы) - это общепринятый стиль структурного программирования,
не важно Batch это, либо язык высокого уровня.

Могу разве, что посоветовать почитать на счет этого авторитетные источники, но нужно ли.
0
Eva Rosalene
Ladybug
4052 / 1591 / 303
Регистрация: 06.01.2013
Сообщений: 4,188
Завершенные тесты: 2
22.01.2013, 18:31 36

Не по теме:

Цитата Сообщение от Dragokas Посмотреть сообщение
Могу разве, что посоветовать почитать на счет этого авторитетные источники
Страуструпа?



 Комментарий модератора 
Прекращаем оффтоп в темах!


Добавлено через 5 минут
Цитата Сообщение от Dragokas Посмотреть сообщение
Batch это, либо язык высокого уровня.
Чем больше читаю здесь, тем для меня батч ближе к языкам высокого уровня...
0
ANDRAON
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 2
14.10.2017, 19:57 37
Хватит обманывать своими МБ, если не знаете матиматики и информатики так и скажите. 1 МБ это не 1 000 000 байт, которые вы округляете и пишите МБ.
Вычисление степени числа
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Echo Off
Setlocal EnableDelayedExpansion
Set /A num=3
::Вычисляем 3 в 4-й степени
Call :Stepping num 4
Echo %num%
pause
exit /B
 
:Stepping %1 - Переменная с числом %2 - Степень
set /A s=%2
if %s%==0 (Set /A %1=1& exit /b)
if %s%==1 exit /b
set step=%3
if not defined step set step=!%1!
set /A s-=1
set /A %1*=%step%
Call :Stepping %1 %s% %step%
exit /b
Не читал всё, может кто-то и верно считает.

Добавлено через 1 час 2 минуты
Цитата Сообщение от Dragokas Посмотреть сообщение
Set DirSize=%DirSize:~0,-6%
Вместо этого подствить
Windows Batch file
1
Set /A DirSize=DirSize/1024/1024
и получите МБ
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
14.10.2017, 20:39 38
ANDRAON, оно то конечно так, но CMD выдаст ошибку при превышении объема папки 2047 МБ.
Т.е. в идеале, нужно учесть и этот момент.
1
nomad656
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 10
06.12.2017, 03:05 39
@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

Подскажите, пжлста, как бы вот выполнение этой команды в текстовик записать?
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
06.12.2017, 03:26 40
Windows Batch file
1
Echo Size of %D% is %DirSizeMB% MB. > file.txt
0
06.12.2017, 03:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2017, 03:26

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

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

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


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

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

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