1 (изменено: griha09, 2015-01-21 14:27:14)

Тема: VBS: сложение времени

Хочу сделать скрипт для подсчета общей длительности видеофайлов в папке



Option Explicit
Dim oFileDetailsReader, sTmpStr, sValue, i, input, output, objFSO, WSHShell, Folder, File, param, SubFolder, str
input = "f:\видео\"        
str=0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")


RecursiveFolderScan input
 MsgBox str

'Создаём процедуру рекурсивного обхода каталога
Sub RecursiveFolderScan(FolderPath)
    'Получаем объектную модель текущего каталога
    Set Folder = objFSO.GetFolder(FolderPath)
 
    'Перебираем все файлы в текущем каталоге
    For Each File in Folder.Files
Set oFileDetailsReader = New cFileDetailsReader
With oFileDetailsReader
    .OpenFile File
        param = .GetDetail(27)

 str=str+param
   End With
 Next
    'Перебираем все подкаталоги в каталоге
    For Each SubFolder in Folder.SubFolders
        RecursiveFolderScan(SubFolder.Path)
    Next
Set WSHShell = Nothing

  End Sub



Set WSHShell = Nothing


Class cFileDetailsReader
    Private oFSO, oShellApp, oFolder3, oFolderItem
    
    Private Sub Class_Initialize()
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        Set oShellApp = CreateObject("Shell.Application")
    End Sub
    
    Sub OpenFile(FilePath)
        With oFSO.GetFile(FilePath)
            Set oFolder3 = oShellApp.NameSpace(.ParentFolder.Path)
            Set oFolderItem = oFolder3.ParseName(.Name)
        End With
    End Sub
    
    Function GetDetail(Index)
        GetDetail = oFolder3.GetDetailsOf(oFolderItem,Index)
    End Function

    Function GetDetailName(Index)
        GetDetailName = oFolder3.GetDetailsOf(0,Index)
    End Function
End Class

но затык с сложением времени

2

Re: VBS: сложение времени

griha09 пишет:

... но затык с сложением времени

Замените строку

str=str+param

на

str=str+cdate(param)
Щт Уккщк Куыгьу Туче

3 (изменено: Flasher, 2015-01-22 14:31:47)

Re: VBS: сложение времени

' Подсчёт общей длительности доступных видео-файлов в структуре данного каталога

Set Shell = CreateObject("Shell.Application")
CD = CreateObject("WScript.Shell").CurrentDirectory
Exts = "*.3gp;*.asf;*.avi;*.mov;*.mp4;*.mpg;*.wmv;*.vob"
Dim A(0) : A(0) = 0 : FFolder CD
D = Int(A(0)/86400) : H1 = A(0) - (D * 86400)
H = Int(H1/3600)    : M1 = H1   - (H * 3600)
M = Int(M1/60)      : S  = M1   - (M * 60)
If D = 0 Then D = "" Else D = D & " дн. "
MsgBox "Общая продолжительность доступных видео-файлов " & _
"структуры папки """ & CD & """: " & D & TimeSerial(H, M, S), 64

Sub FFolder(Folder)
  Set Folder = Shell.NameSpace(Folder)
  Set Items  = Folder.Items
  Items.Filter 192, Exts
  For Each File in Items
    Dur = Folder.GetDetailsOf(File, 27)
    If Dur <> "" Then A(0) = A(0) + DateDiff("s", 0, Dur)
  Next : Items.Filter 160, "*"
  For Each Fd In Items : FFolder Fd.Path : Next
End Sub

4

Re: VBS: сложение времени

Спасибо!

5 (изменено: griha09, 2015-07-09 00:25:51)

Re: VBS: сложение времени

Flasher, продолжая мой вопрос. Здесь перечислены переменные? Что означает FFolder CD?

Dim A(0) : A(0) = 0 : FFolder CD

6 (изменено: Flasher, 2015-07-09 00:30:20)

Re: VBS: сложение времени

Раскладываем на 3 строчки.

Dim A(0) ' объявляем массив, 0 - один элемент массива
A(0) = 0 ' устанавливаем первичное значение первого и, соотв., единственного элемента массива
FFolder CD ' вызываем процедуру, подставляя путь рабочей папки в качестве её аргумента

Время жизни переменной в процедуре длится, как известно, до окончания её отработки, в то время как элемент массива (как и элемент коллекции) позволяет не терять обновляемое в ней значение.

7

Re: VBS: сложение времени

Спасибо.

8 (изменено: griha09, 2015-07-25 22:02:55)

Re: VBS: сложение времени

Flasher, решил чуть переделать вашу процедуру вот так

Sub FFolder(Folder, Folder2)
  Set Folder = Shell.NameSpace(Folder)
  Set Items  = Folder.Items
  Items.Filter 192, Exts
  For Each File in Items
objFSO.MoveFile File, Folder2+File.Name 
  Next
End Sub

чтоб после отсортировки переносить отсортированные видеофайлы, да в цикле выдает только имя(без расширения) файла. Не  подкажите как получить полное имя с путем для переноса файла?

9

Re: VBS: сложение времени

griha09, с этим, я так понимаю, сюда.

10

Re: VBS: сложение времени

Вопрос, не совсем по теме.
Можно ли без вызова mediainfo.dll узнать длительность видео с точностью до кадра?

11

Re: VBS: сложение времени

Стандартными методами нельзя.