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

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

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

Аватара для Loki3D

Старожил


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

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


подскажите, возможно ли это и как?

-------
sory 4 my rus


Отправлено: 15:15, 27-11-2009

 


Moderator


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

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


Команда Diruse (Diruse Examples).
Файл Diruse.exe можно взять из установочного CD \Support\Tools\suptools.msi (support.cab).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:24, 27-11-2009 | #2



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

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


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set DirProg=c:\musor

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do (
	If !flag!==1 Set dirsize=%%c
	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
)
Echo !dirsize!
Pause>nul
Кодировка кириллица DOS (866) обязательна.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:34, 27-11-2009 | #3


Аватара для Loki3D

Старожил


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

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


gora, Вариант хороший, но не мой случай, у меня задан набор каталогов, но способ оригинальный

Petya V4sechkin, Большое спасибо за подсказку.

-------
sory 4 my rus


Отправлено: 15:54, 27-11-2009 | #4


Аватара для Oceanel

Новый участник


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

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


gora, Большое спасибо. Немного добавил и получил еще и кол-во файлов:
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set DirProg=c:\musor

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D^|find /I "файлов"') Do (
    If !flag!==1 Set dirsize=%%c
    If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
    set filecnt=%%a
   )
Echo Размер папки      = !dirsize!
Echo Количество файлов = !filecnt!

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

Отправлено: 16:36, 05-11-2010 | #5


Новый участник


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

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


Цитата Oceanel:
Echo Размер папки = !dirsize! »
Обьясните плиз, как сделать что бы размер показывался в кб\мб\гб

Отправлено: 16:32, 02-02-2011 | #6


Аватара для gora

Ушёл из жизни


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

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


Цитата XFNeo:
как сделать что бы размер показывался в кб\мб\гб »
C ГБ делать не стал, там числа будут близки к максимуму для CMD. Остальное как-то так:
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set DirProg=c:\Documents and Settings

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-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, dirsizeKB=dirsize/kb, ostKB=dirsize%%kb*100/kb, dirsizeMB=dirsize/mb, ostMB=dirsize%%mb*100/mb
Rem Set /a dirsizeGB=dirsize/gb, ostGB=dirsize%%gb*10/gb
Echo %dirsize% Б
Echo %dirsizeKB%,%ostKB% кБ
Echo %dirsizeMB%,%ostMB% МБ
Rem Echo %dirsizeGB%,%ostGB% ГБ
Pause>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 03-02-2011 | #7


Новый участник


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

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


Если кому не сложно помогите разобраться в этом коде
Код: Выделить весь код
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do (
  	  If !flag!==1 Set dirsize=%%c
  	  If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)  )
Нужны комментарии ко всем командам.
Заранее благодарен

Отправлено: 14:15, 03-02-2011 | #8


Аватара для gora

Ушёл из жизни


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

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


Цитата XFNeo:
Нужны комментарии ко всем командам. »
Начнем со строки
Код: Выделить весь код
Dir "%DirProg%" /-C /S /A:-D
Она выводит информацию о директории в нужном нам формате. Подробности о ключах посмотрите самостоятельно (Наберите Dir /? в окне консоли).
Можете запустить эту команду отдельно и увидите ее вывод примерно такой:
Код: Выделить весь код
 Том в устройстве C не имеет метки.
 Серийный номер тома: 74B4-362D

 Содержимое папки c:\Musor

16.01.2010  23:50              3238 7z_SFX.ico
16.11.2010  10:34              5035 install_button.bat
22.01.2011  09:02             68608 nircmdc.exe
17.10.2008  14:54              2048 tasktool.exe
               4 файлов          78929 байт

 Содержимое папки c:\Musor\ADD_

21.01.2011  15:55              4419 ConfigSetupButton.txt
22.06.2010  14:52               670 Copyright.res
13.05.2010  22:44             68416 RC.exe
13.05.2010  22:44            331080 RcDll.dll
24.03.2002  20:23            881664 ResHacker.exe
20.01.2011  15:25               873 Version.rc
               6 файлов        1287122 байт

 Содержимое папки c:\Musor\lang

02.02.2011  08:43              4759 1033.ini
02.02.2011  18:40              4557 1049.ini
02.02.2011  11:11              4597 1058.ini
               3 файлов          13913 байт

 Содержимое папки c:\Musor\SFX Tool

07.01.2011  10:06            113152 7zsd_All.sfx
07.01.2011  10:06             92672 7zsd_Deflate.sfx
07.01.2011  10:06             97792 7zsd_LZMA.sfx
07.01.2011  10:06            100352 7zsd_LZMA2.sfx
07.01.2011  10:06            135680 7zsd_LZMA_Dialogs.sfx
07.01.2011  10:06             92160 7zsd_PPMd.sfx
21.01.2011  16:09            308620 Button.chm
26.06.2007  19:22                53 Desktop.ini
02.02.2011  10:58              2270 Settings.ini.new
               9 файлов         942751 байт

     Всего файлов:
              22 файлов        2322715 байт
               0 папок      8314302464 байт свободно
В цикле For производится построчный разбор этого вывода.
skip=4 пропускаем первые 4 строки, т.к., в них не может быть нужной информации
tokens=1-3 каждую строку разбиваем на части по разделителям (они не определены, значит используются по умолчанию символы пробела и табуляции) и первые три части строки записываем в переменные (%%a, %%b и %%c).
В теле цикла ищем нужную строку, содержащую общий размер директории (это вторая снизу строка вывода).
Код: Выделить весь код
	If !flag!==1 Set dirsize=%%c
	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
Т.к. переменная flag не равна 1 то переходим к следующей строке батника и проверяем есть ли в переменной %%b нужное слово файлов: с двоеточием в конце!
Это слово появится только когда цикл дойдет до третьей с конца строки. В этом случае переменной flag будет присвоено значение 1. При обработке следующей строки вывода (предпоследняя строка) команда
Код: Выделить весь код
If !flag!==1 Set dirsize=%%c
сработает и запишет размер директории из %%c в переменную dirsize. После этого строка батника
Код: Выделить весь код
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
снова сбросит переменную flag в 0, дабы не перезаписывать переменную dirsize при обработке последней строки вывода.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:58, 03-02-2011 | #9


Ветеран


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

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


Есть скрипт для удаления временных файлов. Подскажите, как его дополнить, чтобы получить общую сумму удалённых файлов, в мегабайтах до десятых.
Код: Выделить весь код
 
@Echo Off
color 1a
mode con: cols=57 lines=16
echo.
echo   -----------------------------------------------------
echo               “„Ђ‹…Ќ?… ‚ђ…Њ…ЌЌ›• ”Ђ‰‹Ћ‚       
echo   -----------------------------------------------------    
echo.
echo.
PUSHD "%WinDir%\TEMP"
2>Nul RD /S/Q "%WinDir%\TEMP"
POPD
echo    ЋзЁбвЄ* Ї*ЇЄЁ ’emp                            - OK

set Opera_temp=%USERPROFILE%\Local Settings\Application Data\Opera\opera\cache
PUSHD "%Opera_temp%"
2>Nul RD /S/Q "%Opera_temp%"
POPD
echo    ЋзЁбвЄ* ўаҐ¬Ґ**ле д*©«®ў Opera                - OK

if exist "%AppData%\Opera\Opera\typed_history.xml" del "%AppData%\Opera\Opera\typed_history.xml"
if exist "%AppData%\Opera\Opera\global_history.dat" del "%AppData%\Opera\Opera\global_history.dat"
echo    ЋзЁбвЄ* Ёбв®аЁЁ ў Opera                       - OK

set IE_temp=%USERPROFILE%\Local Settings\Temporary Internet Files
PUSHD "%IE_temp%"
2>Nul RD /S/Q "%IE_temp%"
POPD
echo    ЋзЁбвЄ* ўаҐ¬Ґ**ле д*©«®ў Internet Explorer    - OK

set rst=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
Reg Add "%rst%\Recycle Bin" /v StateFlags0001 /t REG_DWORD /d 2 /f | Echo Off  
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query %rst%^|Find /I "Compress old files"`) Do Reg Delete "%rst%\Compress old files" /f | Echo Off
Cleanmgr /sagerun:1
echo    ЋзЁбвЄ* Є®а§Ё*л ** ўбҐе ¤ЁбЄ*е                - OK
echo.
echo.
echo       ЋзЁбвЄ* ўлЇ®«*Ґ**, г¤*«Ґ*® ее,е ЊЎ.
ping 127.0.0.1 -n 8 > nul

Отправлено: 10:32, 01-04-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29
Разное - [решено] удаление каталога с подкаталогами lud Microsoft Windows 2000/XP 2 02-07-2009 15:57
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Интерфейс - [решено] цвет шрифта каталога tref2me Microsoft Windows 2000/XP 4 07-06-2008 07:43
[решено] Идентификация каталога c помощью shell programmist72 Общий по Linux 14 13-11-2006 10:06




 
Переход