Показать средний размер файлов в папках

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Показать средний размер файлов в папках

Сообщение Hjkma »

Нужно чтобы в TC можно узнать в каких папках сколько в среднем занимают файлы. То есть, узнать средние значения, общий размер файлов на количество файлов. Нужно это чтобы быстро вычислить "тяжелые" папки, в которых слишком много файлов большого битрейта или несжатых файлов. Поэтому хотелось бы настроить набор колонка "Размеры папок" и там добавить такую колонку, которая это и показывает. В каких плагинах искать данную возможность, то есть где найти данную колонку?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Настройка для SCP:
[cut="script.ini"]

Код: Выделить всё

[Script]
Section=MiddleSize

[MiddleSize]
Script=MiddleSize.vbs
ParseDirs=1
[/cut]+ вариант с байтами как в подробном виде:
[cut="MiddleSize.vbs"]

Код: Выделить всё

With CreateObject("Scripting.FileSystemObject")
  If .FolderExists(FileName) Then
    Set Files = .GetFolder(FileName).Files
    Count = Files.Count
    If Count Then
      For Each F in Files
        S = S + F.Size
      Next : Size = "  " & Round(S/Count, 0)
      For i = Len(Size) To 3 Step - 3
      	C = " " & Mid(Size, i - 2, 3) & C
      Next : Content = LTrim(C)
    End If
  End If
End With
[/cut]либо с указанием размеров:
[cut="MiddleSize.vbs"]

Код: Выделить всё

With CreateObject("Scripting.FileSystemObject")
  If .FolderExists(FileName) Then
    Set Files = .GetFolder(FileName).Files
    Count = Files.Count
    If Count Then
      For Each F in Files
        S = S + F.Size
      Next : C = S/Count
      If C >= 1073741824 Then
        C = C/1073741824 : S = "Гб"
      ElseIf C >= 1048576 Then C = C/1048576 : S = "Mб"
      ElseIf C >= 1024 Then C = C/1024 : S = "Кб"
      Else : S = "байт" : C = Round(C, 0) : A = Right(C, 1)
      If Left(Right(C, 2), 1) <> 1 And (A > 1 And A < 5) Then S = "байта"
      End If : Content = Replace(Round(C, 3), ",", " ") & " " & S
    End If
  End If
End With
[/cut]В обоих случаях имеет смысл установить -> (выравнивание по правому краю). Выводить через [=script.Result].
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

SCP
А что это и где это взять? И в каких папках положить два файла?

Upd. Разобрался, большое спасибо за скрипт!

Добавлено спустя 59 минут:

И еще одно пожелание. А возможно ли сделать так, чтобы показать средний размер всех файлов в подпапках, а не только в одной папке? То есть, если в одной папке есть 4 папок с файлами внутри, то хотелось бы узнать общий средний размер всех файлов в 4 папках.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Можно, но не уверен, что по скорости устроит. Какой скрипт выбран?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

Flasher
Второй
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Hjkma
ОК. Нулевые и проблемные папки будут проигнорированы.
[cut="MiddleSize.vbs"]

Код: Выделить всё

Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(FileName) Then
  On Error Resume Next
  C = FSO.GetFolder(FileName).Size
  If Err.Number = 0 And C > 0 Then
    On Error Goto 0
    Dim Count : ForFolder FileName : C = C/Count
    If C >= 1073741824 Then
      C = C/1073741824 : S = "Гб"
    ElseIf C >= 1048576 Then C = C/1048576 : S = "Mб"
    ElseIf C >= 1024 Then C = C/1024 : S = "Кб"
    Else : S = "байт" : C = Round(C, 0) : A = Right(C, 1)
      If Left(Right(C, 2), 1) <> 1 And (A > 1 And A < 5) Then S = "байта"
    End If : C = Replace(Round(C, 3), ",", " ") : N = InStrRev(C, " ")
    If N > Len(C) - 3 Then C = Left(C, N) & Left(Mid(C, N + 1) & "00", 3)
    Content = C & " " & S
  End If
End If : Set FSO = Nothing

Sub ForFolder(Folder)
  Set Folder = FSO.GetFolder(Folder)
  Count = Count + Folder.Files.Count
  For Each F In Folder.SubFolders : ForFolder F : Next
End Sub
[/cut]
Последний раз редактировалось Flasher Чт мар 17, 2016 17:18, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

Flasher
Спасибо. Все работает!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Hjkma
ОК. Я там ещё нолики для Гб/Мб/Кб на концах добавил там, где нет.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Middle
average :wink:
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

average :wink:
Mean. :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

Flasher
Не могли бы вы портировать скрипт на WinScript Advanced Content Plugin, просто перешел на 64bit, а оказалось, что нету 64битной версии плагина Script Content Plugin. Читал в теме плагина, что можно переносить скрипты и движок вроде тот же самый...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Hjkma
Так а в чём проблема с переносом? Прописать в ini нужные строки по одному из примеров?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

Flasher
У меня с этими строками в ini ничего не получается, поле есть, а числа размеров нет. Ключ MiddleSize выше прописывал последним.
[MiddleSize]
Script=MiddleSize.vbs
content=Middle Size
extensions=*
FoldersPaths=0
И скрипт кидал в соответствующую папку.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Hjkma
Манипуляция с ключом ActiveScripts проведена?
И: FoldersPaths=1
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

Flasher
Поставил единичку, теперь заработало. Спасибо.

Добавлено спустя 18 минут:

Еще есть проблема. В числах вместо запятой идут пробелы, например вместо 1,202 Mb идет 1 202 Mb, а вместо 204,244 Kb идут 204 244 Kb. Это сбивает с толку. Копировал текст последнего скрипта как есть.
Ответить