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

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

Ответить
Настройки темы
CMD/BAT - [решено] узнать размер папок. экспорт в txt

Старожил


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

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


Изменения
Автор: shadowbat
Дата: 21-05-2010
как реализовать через bat либо vbs

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

как сделать чтобы полный размер папок считался так, как будто я на нее в винде нажал alt+enter

Отправлено: 20:36, 21-05-2010

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата shadowbat:
как реализовать через bat либо vbs
чтобы узнать полный размер всех папок, которые находятся с .bat в одной папке. »
shadowbat, и CMD, и WSH:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Echo WScript.Echo CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)).Size>GetDirSize.vbs
For /D %%A In (*) Do (
	For /F %%B In ('CScript //Nologo GetDirSize.vbs "%%A"') Do (
		Set Bytes=%%B
		Set /A IntMB=!Bytes!/1048576
		Set /A IntKB=!Bytes!/1024
		Set /A FloatMB=!Bytes!%%1048576/10000
		Set /A FloatKB=!Bytes!%%1024/10
	)
	Echo !IntMB!,!FloatMB! MBytes or !IntKB!,!FloatKB! KBytes or !Bytes! Bytes>>GetDirsSize.txt
)
EndLocal
Del /F /Q GetDirSize.vbs 1>nul 2>&1
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:35, 21-05-2010 | #2



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

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


Старожил


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

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


мммм... какая вкуснятина!! работает!

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

Отправлено: 22:59, 21-05-2010 | #3


Ветеран


Contributor


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

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


Мне кажется то, что предложено El Sanchez несколько эклектично, хотя по своему очень интересно, логичнее всё сделать в VBS, да и если к какой-либо папке нет доступа (например, чаще всего "System Volume Information" или к какой-то сетевой) приведенное решение не отработает.
Вот решение полностью на VBS
Код: Выделить весь код
DirName = "c:\TraLaLa\"

'                DirName = ""     ' Если скрипт в исследуемой папке и не хочется указывать к ней путь

If Len(DirName)=0 Then DirName=Replace(WScript.ScriptFullName,WScript.ScriptName,"")

WhereOut = DirName + "SizeSubDir.inf"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folders = FSO.GetFolder(DirName).SubFolders

Out = ""

For Each Folder In Folders
    
    On Error Resume Next
    FolderSize = CStr(Round(Folder.Size / 1024 / 1024,2))
    
    If Err.Number <> 0 Then FolderSize = "Не определено"
    FolderSize = Right("              " + FolderSize, 14)
    
    Out = Out + FolderSize + "  " + Folder.Name + vbCrLf ' Если не надо имена, удалить +"  "+Folder.Name
Next

Set F = FSO.OpenTextFile(WhereOut, 2, True)
F.Write Out
F.Close
Можно указать, в какой папке вам интересен размер подпапок, если интересен размер подпапок там, откуда запущен скрипт, надо указать
DirName = ""
(в приведенном скрипте эта строка закомментирована и не выполняется)

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


Последний раз редактировалось megaloman, 22-05-2010 в 01:02.

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

Отправлено: 23:56, 21-05-2010 | #4


Googler


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

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


Цитата El Sanchez:
и CMD, и WSH »
CMD не поддерживает арифметику 64-битных чисел, что соответствует размеру папки >2Gb
читать дальше »
Код: Выделить весь код
@echo off

set X=2147483648
echo %X%

set /A X+=1
echo %X%

pause >nul

так что вариантов два:

- округлять простым отбрасыванием младших цифр в строке (3/6/9) через SET;
- включить эту функциональность в VBS-модуль:

Код: Выделить весь код
CHCP 1251 >Nul
Echo Do While Not WScript.StdIn.AtEndOfStream::WScript.Echo Round(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.StdIn.ReadLine).Size/2^^20,2)::Loop>GetDirSize.vbs
DIR /AD/B|CScript //Nologo GetDirSize.vbs
или так:
Код: Выделить весь код
Echo Do While Not WScript.StdIn.AtEndOfStream::WScript.Echo Round(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.StdIn.ReadLine).Size/2^^20,2)::Loop>GetDirSize.vbs
CMD /U/C "DIR /AD/B"|CScript //U //Nologo GetDirSize.vbs
Цитата megaloman:
то, что предложено El Sanchez несколько эклектично »
увы, многие операции проще и быстрее выполнить в CMD... пока Microsoft не начнет заботиться о функциональной преемственности своих скриптовых платформ, для многих задач такое взаимодействие будет просто необходимо

Последний раз редактировалось amel27, 22-05-2010 в 09:22. Причина: + юникод

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

Отправлено: 08:31, 22-05-2010 | #5


Ветеран


Contributor


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

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


Цитата amel27:
увы, многие операции проще и быстрее выполнить в CMD »
- это так, но основной недостаток CMD - нет толкового учебника с примерами. То, что Вы демонстрируете на форуме, нигде больше я не видел. WSH и VBS (JS) тем и хороши, что они описаны. Хотя по скорости CMD часто вне конкуренции. Однако в этом случае когда я попробовал решить эту задачу тупым суммированием размеров файлов, получил монстра с долгим выполнением (при том, что я не подозревал о верхней границе чисел в CMD).
Код: Выделить весь код
Echo Off
del SizeSubDir.inf >Nul

FOR /F "usebackq delims=" %%i IN (`dir /A:D /B`) DO Call :SubDir "%%~fi" "%%i"
GoTo :EOF

:SubDir
Set Size=0
FOR /R %1 %%s IN (*.*) DO Call :SubDirSize %%~zs

rem Если мегабайты
rem Set /A Size=%Size%/1048576
rem Set Size=      %Size%
rem Echo %Size:~-6% Mb  %2>>SizeSubDir.inf

rem Если килобайты
Set /A Size=%Size%/1024
Set Size=         %Size%
Echo %Size:~-9% Kb  %2>>SizeSubDir.inf

GoTo :EOF

:SubDirSize
Set /A Size=%Size%+%1
Любой язык силён теми функциями, к которым можно обратиться. И у CMD таких возможностей масса. Но хелпами сыт не будешь

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


Последний раз редактировалось megaloman, 22-05-2010 в 11:55.


Отправлено: 10:53, 22-05-2010 | #6


Старожил


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

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


Цитата megaloman:
То, что Вы демонстрируете на форуме, нигде больше я не видел »
надо эти все знания amel27 передать поколениям настоящий специалист

Отправлено: 11:00, 22-05-2010 | #7


Googler


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

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


Цитата megaloman:
основной недостаток CMD - нет толкового учебника с примерами. То, что Вы демонстрируете на форуме, нигде больше я не видел. WSH и VBS (JS) тем и хороши, что они описаны. »
и тем не менее, 95% применяемого есть в справке... другое дело, что написана она не для людей + корявый перевод + ошибки... например, "IF /?" утверждает, что равенство проверяется оператором "EQL", тогда как на самом деле "EQU"... что касается оставшихся недокументированных 5%, тут действительно сложно - лексика CMD гуглю не поддается, примеры рулят! :)

Цитата megaloman:
по скорости CMD часто вне конкуренции. Однако в этом случае когда я попробовал решить эту задачу тупым суммированием размеров файлов, получил монстра с долгим выполнением »
скорость CMD обеспечивается штатными ф-циями и внешними консольными утилитами, написанными на Win32 API (быстрее не бывает), сам CMD-интерпретатор (циклы, операторы и т.п.) работает медленней WSH

Цитата shadowbat:
надо эти все знания amel27 передать поколениям »
дык всё в ваших руках - изучайте!.. а мы уж в меру сил и возможностей кодом нагрузим ;)

Отправлено: 14:11, 22-05-2010 | #8



Moderator


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

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


[решено] Вывод размера папки в отдельный файл скриптом

Отправлено: 15:41, 22-05-2010 | #9


Пользователь


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

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


Код: Выделить весь код
DirName = "c:\TraLaLa\"

'                DirName = ""     ' Если скрипт в исследуемой папке и не хочется указывать к ней путь

If Len(DirName)=0 Then DirName=Replace(WScript.ScriptFullName,WScript.ScriptName,"")

WhereOut = DirName + "SizeSubDir.inf"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folders = FSO.GetFolder(DirName).SubFolders

Out = ""

For Each Folder In Folders
    
    On Error Resume Next
    FolderSize = CStr(Round(Folder.Size / 1024 / 1024,2))
    
    If Err.Number <> 0 Then FolderSize = "Не определено"
    FolderSize = Right("              " + FolderSize, 14)
    
    Out = Out + FolderSize + "  " + Folder.Name + vbCrLf ' Если не надо имена, удалить +"  "+Folder.Name
Next

Set F = FSO.OpenTextFile(WhereOut, 2, True)
F.Write Out
F.Close
Интересное решение

Подскажите, что надо дописать в этот скрипт, что бы в конце был суммирующий результат папки c:\TraLaLa\

Отправлено: 14:32, 10-11-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Размер папок NIC444 Microsoft Windows 7 5 15-09-2014 09:32
Отображаемый размер квотируемых папок rrev Microsoft Windows NT/2000/2003 7 29-09-2009 09:46
[решено] Вставить строчку из одного txt в оределённое место другого txt ZeroCrash AutoIt 7 13-07-2009 07:35
Ограничения на размер профиля+исключение папок из профиля Grug Microsoft Windows NT/2000/2003 2 04-03-2009 11:09
Доступ - Ограничение на размер папок Xavier Teodonius Microsoft Windows 2000/XP 2 10-04-2008 12:12




 
Переход