Показать полную графическую версию : [решено] узнать размер папок. экспорт в txt
shadowbat
21-05-2010, 20:36
как реализовать через bat либо vbs
чтобы узнать полный размер всех папок, которые находятся с .bat в одной папке.
и сохранить список размеров по порядочку в txt (без названия папок. просто столбик размеров в Мб (желательно) либо в Кб)
как сделать чтобы полный размер папок считался так, как будто я на нее в винде нажал alt+enter
El Sanchez
21-05-2010, 22:35
как реализовать через 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
shadowbat
21-05-2010, 22:59
мммм... какая вкуснятина!! работает!
я смотрю, зная такой язык програмирования можно легко себе наваять тучу программ которые справятся с текущими задачами. чем искать в интернете нужную тебе перебирая десятки бесполезных!
megaloman
21-05-2010, 23:56
Мне кажется то, что предложено 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 = ""
(в приведенном скрипте эта строка закомментирована и не выполняется)
и 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
то, что предложено El Sanchez несколько эклектично »
увы, многие операции проще и быстрее выполнить в CMD... пока Microsoft не начнет заботиться о функциональной преемственности своих скриптовых платформ, для многих задач такое взаимодействие будет просто необходимо
megaloman
22-05-2010, 10:53
увы, многие операции проще и быстрее выполнить в 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 таких возможностей масса. Но хелпами сыт не будешь
shadowbat
22-05-2010, 11:00
То, что Вы демонстрируете на форуме, нигде больше я не видел »
надо эти все знания amel27 передать поколениям :) настоящий специалист
основной недостаток CMD - нет толкового учебника с примерами. То, что Вы демонстрируете на форуме, нигде больше я не видел. WSH и VBS (JS) тем и хороши, что они описаны. »и тем не менее, 95% применяемого есть в справке... другое дело, что написана она не для людей + корявый перевод + ошибки... например, "IF /?" утверждает, что равенство проверяется оператором "EQL", тогда как на самом деле "EQU"... что касается оставшихся недокументированных 5%, тут действительно сложно - лексика CMD гуглю не поддается, примеры рулят! : )
по скорости CMD часто вне конкуренции. Однако в этом случае когда я попробовал решить эту задачу тупым суммированием размеров файлов, получил монстра с долгим выполнением »скорость CMD обеспечивается штатными ф-циями и внешними консольными утилитами, написанными на Win32 API (быстрее не бывает), сам CMD-интерпретатор (циклы, операторы и т.п.) работает медленней WSH
надо эти все знания amel27 передать поколениям »дык всё в ваших руках - изучайте!.. а мы уж в меру сил и возможностей кодом нагрузим ; )
Petya V4sechkin
22-05-2010, 15:41
[решено] Вывод размера папки в отдельный файл скриптом (http://forum.oszone.net/thread-111576.html)
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\
Подскажите, что надо дописать в этот скрипт, что бы в конце был суммирующий результат папки c:\TraLaLa\ »
Ничего.
Option Explicit
WScript.Echo WScript.CreateObject("Scripting.FileSystemObject").GetFolder("C:\Мои проекты").Size
WScript.Quit 0
Option Explicit
Dim strSourceFolder
Dim objFSO
Dim objFile
If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
WScript.Echo objFSO.GetFolder(strSourceFolder).Size
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
WScript.Quit 1
End If
WScript.Quit 0
Что значит ничего ?
Скрипт создаёт файл в котором пишет размер + название каждой папки в директории c:\TraLaLa\
Осталось дописать что бы определил размер самой директории c:\TraLaLa\ и тоже дописал в этот файл
Может всё таки поможете ?
Next
With FSO.GetFolder(DirName)
Out = Out & CStr(Round(.Size / 2^20, 2)) & " " & .Name & vbCrLf
End With
Set F = FSO.OpenTextFile(WhereOut, 2, True)
Не проверялось.
megaloman
10-11-2018, 16:29
palexa, О, неужели это я ваял? Как молоды мы были ... Вставьте между выделенным Next
If FSO.FileExists(WhereOut) Then FSO.DeleteFile (WhereOut)
FolderSize = CStr(Round(FSO.GetFolder(DirName).Size / 1024 / 1024, 2))
FolderSize = Right(" " + FolderSize, 14)
Out = Out + FolderSize + " " + DirName
Set F = FSO.OpenTextFile(WhereOut, 2, True)
Возможна неточность: при существующем пути к Out-файлу общий размер папки после работы скрипта будет отличаться на размер выходного файла. Но, скорее всего, его размер много меньше общего размера папки и на результате не скажется.
Либо надо явно прописать другой путь к выходному файлу в любое доступное место вне анализируемой папки, напримерWhereOut = "Z:\SizeSubDir.inf"
Iska и megaloman спасибо большое
Возможна неточность: при существующем пути к Out-файлу общий размер папки после работы скрипта будет отличаться на размер выходного файла. »
Не будет. Вы же его создаёте после подсчёта.
megaloman
10-11-2018, 17:43
palexa, @Echo Off
cls
Set "BoxIn=D:\Мой контент"
Set "Out=D:\Мой контент.inf"
Set "Def="
Set "Marg= "
Set "Marg="
Call :DSize "%BoxIn%" "iSize"
>"%Out%" Echo %iSize% %BoxIn%
For /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /B /A:D`) DO Call :Out "%BoxIn%\%%d" %Def%- "%Marg%"
pause
GoTo :Eof
:Out
Call :DSize %1 "iSize"
>>"%Out%" Echo %iSize% %~3%2%~nx1
For /F "usebackq delims=" %%d IN (`2^>nul Dir %1 /B /A:D`) DO Call :Out "%~1\%%d" %2- "%~3%Marg%"
GoTo :Eof
:DSize
SetLocal EnableExtensions EnableDelayedExpansion
For /F "usebackq delims=" %%z IN (`2^>nul Dir %1 /S /A`) DO Set ZZ=!Z1! &Set Z1=%%z
Set "ZZ=%ZZ:~5%"
EndLocal &Set "%~2=%ZZ%"
GoTo :Eof Не будет. Вы же его создаёте после подсчёта. »Увы, будет. После подсчета файл записывается внутрь рассматриваемой папки и его размер в общем итоге не учтен.Либо надо явно прописать другой путь к выходному файлу в любое доступное место вне анализируемой »
Увы, будет. После подсчета файл записывается внутрь рассматриваемой папки и его размер в общем итоге не учтен. »
А… Вы вот в каком плане. Ну, так я про то же. Только я-то полагал, что именно так и будет правильным считать — без его учёта.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.