Страница 1 из 2

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

Добавлено: Чт мар 17, 2016 00:35
Hjkma
Нужно чтобы в TC можно узнать в каких папках сколько в среднем занимают файлы. То есть, узнать средние значения, общий размер файлов на количество файлов. Нужно это чтобы быстро вычислить "тяжелые" папки, в которых слишком много файлов большого битрейта или несжатых файлов. Поэтому хотелось бы настроить набор колонка "Размеры папок" и там добавить такую колонку, которая это и показывает. В каких плагинах искать данную возможность, то есть где найти данную колонку?

Добавлено: Чт мар 17, 2016 02:09
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].

Добавлено: Чт мар 17, 2016 12:43
Hjkma
SCP
А что это и где это взять? И в каких папках положить два файла?

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

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

И еще одно пожелание. А возможно ли сделать так, чтобы показать средний размер всех файлов в подпапках, а не только в одной папке? То есть, если в одной папке есть 4 папок с файлами внутри, то хотелось бы узнать общий средний размер всех файлов в 4 папках.

Добавлено: Чт мар 17, 2016 14:01
Flasher
Можно, но не уверен, что по скорости устроит. Какой скрипт выбран?

Добавлено: Чт мар 17, 2016 14:12
Hjkma
Flasher
Второй

Добавлено: Чт мар 17, 2016 16:20
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]

Добавлено: Чт мар 17, 2016 17:06
Hjkma
Flasher
Спасибо. Все работает!

Добавлено: Чт мар 17, 2016 17:20
Flasher
Hjkma
ОК. Я там ещё нолики для Гб/Мб/Кб на концах добавил там, где нет.

Добавлено: Чт мар 17, 2016 17:56
Tol!k
Middle
average :wink:

Добавлено: Чт мар 17, 2016 18:49
Flasher
average :wink:
Mean. :wink:

Добавлено: Вс фев 05, 2017 12:28
Hjkma
Flasher
Не могли бы вы портировать скрипт на WinScript Advanced Content Plugin, просто перешел на 64bit, а оказалось, что нету 64битной версии плагина Script Content Plugin. Читал в теме плагина, что можно переносить скрипты и движок вроде тот же самый...

Добавлено: Вс фев 05, 2017 13:57
Flasher
Hjkma
Так а в чём проблема с переносом? Прописать в ini нужные строки по одному из примеров?

Добавлено: Вс фев 05, 2017 14:18
Hjkma
Flasher
У меня с этими строками в ini ничего не получается, поле есть, а числа размеров нет. Ключ MiddleSize выше прописывал последним.
[MiddleSize]
Script=MiddleSize.vbs
content=Middle Size
extensions=*
FoldersPaths=0
И скрипт кидал в соответствующую папку.

Добавлено: Вс фев 05, 2017 14:29
Flasher
Hjkma
Манипуляция с ключом ActiveScripts проведена?
И: FoldersPaths=1

Добавлено: Вс фев 05, 2017 14:50
Hjkma
Flasher
Поставил единичку, теперь заработало. Спасибо.

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

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