Показать полную графическую версию : [решено] узнать размер папок. экспорт в txt
it3, что такое сетевой диск? Задан буквой или сетевым путем? А прав хватает? »
Задана буква, но даже если задать сетевой путь - аналогично. Прав хватает.
O:\Folder\Folder -> not found
O:\Folder\Folder\Folder -> not found
O:\Folder\Folder\Folder7 -> not found
O:\Folder\Folder8 -> not found
megaloman
21-08-2019, 09:21
it3, O:\Folder -> 167450
\\Server\Test1\Folder -> 167450
Значит, указываете пути неправильно
Если в путях кириллица - сохраните скрипт в 1251 кодировке (например, notepad)
Проделайте в командном окне>c:\txt.txt 2>&1 Dir /b /A:D "O:\Folder"
Файл c:\txt.txt прикрепите к сообщению
Файл c:\txt.txt прикрепите к сообщению »
Во вложении.
Значит, указываете пути неправильно
Если в путях кириллица - сохраните скрипт в 1251 кодировке (например, notepad)
Проделайте в командном окне »
Изменил Кириллицу на Windows-1251. Безрезультатно.
Но скорее всего причина именно в ней.
it3, Переименуйте скрипт в .txt, приложите к сообщению »
Разобрался, работает. Прошу прощения.
Причина была в том, что скрипт до конца не дорабатывал. Т.е. я преждевременно открывал готовый результат, чтобы убедиться в том, что результат записывается. Но т.к. объем данных в каталогах велик, процесс занимает довольно-таки длительное время. Решение - дождаться завершения.
Спасибо.
Возможно ли доработать скрипт таким образом, чтобы он полученное значением складывал в существующий Excel-документ (с расширением *.xlsx) во второй столбец начиная со второй строки (т.к. порядок каталогов в *.cmd-файле соответствует порядку каталогов в Excel-документе?
megaloman
21-08-2019, 10:17
it3, Возможно ли доработать скрипт » - в CMD не нужно, получится извращение. Надо либо написать скрипт на чём-то другом (vbs, например). Имена папок брать прямо из таблицы.
Еще лучше сделать по другому: в Excel.xlsm-документе сделать макрос.
Причём оформить его в виде функции. Хотя, если папищи громадные, наверное это будет не очень удобно. Надо пробовать.
Приказывайте!
во второй столбец начиная со второй строки »
А чем кончается список папок?
А чем кончается список папок? »Пустой ячейкой.
Т.е. в первой строке/столбце наименование столбца, далее, начиная со второй строки первого столбца список путей к каталогам.
megaloman
21-08-2019, 11:12
it3, Идея с функцией мне самому понравилась :clapping: Переименуйте приложенный файл. В ячейках функция, например:=FFolderSize(C8) В С8 - путь. Размножаете функцию стандартным образом по ячейкам.
Устроит?
В С8 - путь. Размножаете функцию стандартным образом по ячейкам.
Устроит? »В принципе - отлично.
За исключением того, когда выполняется считывание каталогов - все открытые документы Excel зависают. :-)
За исключением того, когда выполняется считывание каталогов - все открытые документы Excel зависают. :-) »
Не «открытые документы Excel зависают». Само приложение занято.
Откройте отдельный экземпляр Microsoft Excel, и в нём уже открывайте данную Рабочую книгу.
megaloman, делитель (байты/килобайты/мегабайты/гагабайты) можно при желании добавить вторым аргументом функции.
Откройте отдельный экземпляр Microsoft Excel, и в нём уже открывайте данную Рабочую книгу. »Действительно.
Спасибо.
megaloman
21-08-2019, 14:54
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, делитель (байты/килобайты/мегабайты/гагабайты) можно при желании добавить вторым аргументом функции. »Не стал этого делать для функции в ячейке: решил, так гибче. В формуле в ячейке написать деление не проблема, тем более, возможно, еще приделать какую-нибудь функцию, типа ОКРУГ.
В скрипте решил, что здесь удобнее приделать еще один аргумент, поэтому чуть доработал.
размер которых необходимо вывести в *.txt/*.csv (Формат: Папка -> Размер). »
Но т.к. объем данных в каталогах велик, процесс занимает довольно-таки длительное время. »
Скрипт 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
it3, VBS
Категорически не советую, пока скрипт не отработал, работать с другой таблицей в другом окне.
Путь к таблице, адреса ячеек пропишИте свои. »
megaloman, подскажите пожалуйста, в некоторых "путях"/каталогах вместо размера пишется текст:
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Путь не найден
Хотя, по факту, путь правильный, и если пройти по этому пути, и провалиться в подкаталог, и вставить этот путь в табличку, то размер считывается, а корневой каталог, не считывается. Привилегии полные.
megaloman
22-08-2019, 10:27
it3, Не знаю.Хотя, по факту, путь правильный » Если на клетке слона прочтёшь надпись «буйвол», не верь глазам своим.Значит, что-то Вы не то пишите, ИМХО.
Мой полёт извращенной фантазии:
1. Вместо латинской буквы стоИт русская: (О-O, например)
2. В ячейке в пути перед путём есть пробел(ы).
3. Путь указан в кавычках без знака = впереди. То есть, "D:\Тра ля ля" - нельзя, а ="D:\Тра ля ля" можно.
Естественно, можно просто D:\Тра ля ля (без пробела впереди)
Я бы рекомендовал для указанных Вами путей, где получили "Путь не найден" найти эту папку в проводнике, правой кнопкой мышки вызвать свойства, в закладке Общие, строке Расположение выделить и скопировать путь, вставить в ячейку таблицы.
А вот еще возможность: скопировать указанный путь из ячейки таблицы, и в командном окне проделать
Dir "вставленный из буфера путь\*.*"
Посмотреть, что на это скажет команда Dir
Весь этот Марлезонский балет нужен, чтобы убедиться в правильности указания пути.
Значит, что-то Вы не то пишите, ИМХО.
Мой полёт извращенной фантазии:
1. Вместо латинской буквы стоИт русская: (О-O, например)
2. В ячейке в пути перед путём есть пробел(ы).
3. Путь указан в кавычках без знака = впереди. То есть, "D:\Тра ля ля" - нельзя, а ="D:\Тра ля ля" можно.
Естественно, можно просто D:\Тра ля ля (без пробела впереди)
Я бы рекомендовал для указанных Вами путей, где получили "Путь не найден" найти эту папку в проводнике, правой кнопкой мышки вызвать свойства, в закладке Общие, строке Расположение выделить и скопировать путь, вставить в ячейку таблицы.
А вот еще возможность: скопировать указанный путь из ячейки таблицы, и в командном окне проделать
Dir "вставленный из буфера путь\*.*"
Посмотреть, что на это скажет команда Dir
Весь этот Марлезонский балет нужен, чтобы убедиться в правильности указания пути. »
Первое что я сделал - это скопировал путь из "Расположения" и вставил в ячейку Excel. Команда dir отрабатывает (выводится количество папок в каталоге и свободное пространство в байтах).
Даже если скопировать этот путь из Excel и вставить в проводник - путь рабочий. Если вставить из Excel в командную строку - тоже работает.
it3, ну, упакуйте Ваш получившийся файл Рабочей книги в архив, каковой приложите к сообщению.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.