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

Компьютерный форум 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

 

Ветеран


Contributor


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

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


it3, VBS
Категорически не советую, пока скрипт не отработал, работать с другой таблицей в другом окне.
Путь к таблице, адреса ячеек пропишИте свои.
Код: Выделить весь код
FileXLS = "Z:\Soft_In\я19082113.xlsx"

Fname1 = "C6"   ' Первая ячейка с путём
fsize1 = "F6"   ' Первая ячейка с размером
koeff = 2       ' 0-байты, 1-Kb, 2-Mb, 3-Gb, 4-Tb

With CreateObject("Excel.Application")
    .Visible = True
    .Workbooks.Open (FileXLS)

    i = 0
    Do
        Pfold = .Range(Fname1).Offset(i, 0)
        If InStr(1, Pfold, "\") = 0 Then Exit Do
        .Range(fsize1).Offset(i, 0) = FFolderSize(Pfold, koeff)
        i = i + 1
    Loop
End With
MsgBox "Done!"
' ===============================

Function FFolderSize(arg, k)
    On Error Resume Next
    Err.Number = 0
    
    FFolderSize = CreateObject("Scripting.FileSystemObject").GetFolder(arg).Size
    If Err.Number <> 0 Then
            FFolderSize = Err.Description
    Else
        If k = 1 Then FFolderSize = FFolderSize / 1024
        If k = 2 Then FFolderSize = FFolderSize / 1024 / 1024
        If k = 3 Then FFolderSize = FFolderSize / 1024 / 1024 / 1024
        If k = 4 Then FFolderSize = FFolderSize / 1024 / 1024 / 1024 / 1024
    End If
    On Error GoTo 0
End Function
Iska,
Цитата Iska:
делитель (байты/килобайты/мегабайты/гагабайты) можно при желании добавить вторым аргументом функции. »
Не стал этого делать для функции в ячейке: решил, так гибче. В формуле в ячейке написать деление не проблема, тем более, возможно, еще приделать какую-нибудь функцию, типа ОКРУГ.
В скрипте решил, что здесь удобнее приделать еще один аргумент, поэтому чуть доработал.

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

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

Отправлено: 14:54, 21-08-2019 | #51



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата it3:
размер которых необходимо вывести в *.txt/*.csv (Формат: Папка -> Размер). »
Цитата it3:
Но т.к. объем данных в каталогах велик, процесс занимает довольно-таки длительное время. »
Скрипт powershell (два каталога, общим размером 65Гб и с количеством файлов 51837, вычисляются за 27 сек.):
в скрипт встроен таймер, результат выводится в файл execution_speed.txt
таймер безболезненно можно удалить (первые две строки и последние тоже две)
Код: Выделить весь код
$watch = [system.diagnostics.stopwatch]::startnew() #таймер
$watch.start() #запуск таймера

function Get-SizeDirectory {
	param (
		[parameter(ValueFromPipeline=$true)]
		[string[]]$arr
	)
	process {
		foreach ($item in $arr) {
			$tmp = gi $item
			$math = dir -lit $tmp.fullname -rec -force|
				?{!$_.psiscontainer}|measure -prop length -sum
			[pscustomobject]@{
				Name = $tmp.name #Имя каталога
				Fullname = $tmp.fullname #Абсолютный путь с именем
				Count = $math.count #Счетчик файлов в каталоге
				Size = "{0:G}" -f ($math.sum/$k) #Размер каталога
			}
		}
	}
}

#Перечисление каталогов непосредственно в скрипте:
#для использования, блок раскомментировать, при этом, необходимо
#закомментировать обе строки получения массива из файла ниже
<#
$fld = @(
	'O:\Folder1',
	'O:\Folder1\podFolder1',
	'O:\Folder2\podFolder2\podpodFolder2' 
	#и т.д.
)
#>

#Либо получение массива каталогов из текстового файла (один каталог на строку)
$file = 'd:\folders.txt'
$fld = gc $file -enc utf8

#Коэффициент единиц размера каталогов (На выбор: <1|1Kb|1Mb|1Gb|1Tb>):
$k = '1Gb'

#Файл .csv с результатом:
$out = 'result.csv'

$fld|get-sizedirectory|select fullname,count,size|
convertto-csv -not -del ';'|out-file $out -enc utf8

$watch.stop() #остановка таймера
$watch.elapsed >execution_speed.txt #время выполнения
вывод можно сделать и непосредственно в файл .xlsx, но, имхо, это лишнее, т.к. .csv легко открывается в Excel

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 21-08-2019 в 21:37.

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

Отправлено: 20:52, 21-08-2019 | #52

it3 it3 вне форума

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


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

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


Цитата megaloman:
it3, VBS
Категорически не советую, пока скрипт не отработал, работать с другой таблицей в другом окне.
Путь к таблице, адреса ячеек пропишИте свои. »
megaloman, подскажите пожалуйста, в некоторых "путях"/каталогах вместо размера пишется текст:
Код: Выделить весь код
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Хотя, по факту, путь правильный, и если пройти по этому пути, и провалиться в подкаталог, и вставить этот путь в табличку, то размер считывается, а корневой каталог, не считывается. Привилегии полные.

Отправлено: 09:48, 22-08-2019 | #53


Ветеран


Contributor


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

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


it3, Не знаю.
Цитата it3:
Хотя, по факту, путь правильный »
Цитата Козьма Прутков:
Если на клетке слона прочтёшь надпись «буйвол», не верь глазам своим.
Значит, что-то Вы не то пишите, ИМХО.
Мой полёт извращенной фантазии:
1. Вместо латинской буквы стоИт русская: (О-O, например)
2. В ячейке в пути перед путём есть пробел(ы).
3. Путь указан в кавычках без знака = впереди. То есть, "D:\Тра ля ля" - нельзя, а ="D:\Тра ля ля" можно.
Естественно, можно просто D:\Тра ля ля (без пробела впереди)

Я бы рекомендовал для указанных Вами путей, где получили "Путь не найден" найти эту папку в проводнике, правой кнопкой мышки вызвать свойства, в закладке Общие, строке Расположение выделить и скопировать путь, вставить в ячейку таблицы.

А вот еще возможность: скопировать указанный путь из ячейки таблицы, и в командном окне проделать
Dir "вставленный из буфера путь\*.*"
Посмотреть, что на это скажет команда Dir

Весь этот Марлезонский балет нужен, чтобы убедиться в правильности указания пути.

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


Последний раз редактировалось megaloman, 22-08-2019 в 10:37.


Отправлено: 10:27, 22-08-2019 | #54

it3 it3 вне форума

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


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

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


Цитата megaloman:
Значит, что-то Вы не то пишите, ИМХО.
Мой полёт извращенной фантазии:
1. Вместо латинской буквы стоИт русская: (О-O, например)
2. В ячейке в пути перед путём есть пробел(ы).
3. Путь указан в кавычках без знака = впереди. То есть, "D:\Тра ля ля" - нельзя, а ="D:\Тра ля ля" можно.
Естественно, можно просто D:\Тра ля ля (без пробела впереди)
Я бы рекомендовал для указанных Вами путей, где получили "Путь не найден" найти эту папку в проводнике, правой кнопкой мышки вызвать свойства, в закладке Общие, строке Расположение выделить и скопировать путь, вставить в ячейку таблицы.
А вот еще возможность: скопировать указанный путь из ячейки таблицы, и в командном окне проделать
Dir "вставленный из буфера путь\*.*"
Посмотреть, что на это скажет команда Dir
Весь этот Марлезонский балет нужен, чтобы убедиться в правильности указания пути. »
Первое что я сделал - это скопировал путь из "Расположения" и вставил в ячейку Excel. Команда dir отрабатывает (выводится количество папок в каталоге и свободное пространство в байтах).
Даже если скопировать этот путь из Excel и вставить в проводник - путь рабочий. Если вставить из Excel в командную строку - тоже работает.

Отправлено: 10:51, 22-08-2019 | #55


Ветеран


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

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


it3, ну, упакуйте Ваш получившийся файл Рабочей книги в архив, каковой приложите к сообщению.

Отправлено: 11:17, 22-08-2019 | #56



Компьютерный форум 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




 
Переход