Если у вас есть, например, коллекция видеофайлов и они разбросаны на куче дисков локального компьютера, вам наверняка хотелось иметь упорядоченный список этих файлов, в котором можно легко ориентироваться и даже найти дубликаты.
Вот рабочий код под windows, используются объекты, которые присутствуют даже в самых ранних версиях. Стили и расширения файлов можно поменять, адаптировав под ваши задачи.
Файл со скриптом очень удобно использовать: выполнение занимает несколько секунд, результирующий файл можно просматривать в любом браузере и обновлять его можно в любое время.
On Error Resume Next ' при ошибке - выполняется следующая инструкция Public Sub listFile(Folder, byRef s) ' рекурсивная функция для поиска файлов Dim SubFolder, file For Each SubFolder In Folder.SubFolders ' перебираем вложенные папки с открытым доступом, флаг = 0,1,8,16 if SubFolder.Attributes = 0 or SubFolder.Attributes = 16 or SubFolder.Attributes = 1 or SubFolder.Attributes = 8 Then listFile SubFolder, s End if Next For Each file In Folder.Files ' перебираем вложенные файлы нужного расширения p = Split(file.Name,".") if UBound(p) > 0 Then if p(UBound(p))="avi" or p(UBound(p))="mp4" or p(UBound(p))="mkv" or p(UBound(p))="flv" Then t = Split(file.Path,"\") ' добавляем нужный файл в список, ставим имя файла в ключ на 1-е место для сортировки по алфавиту s.Add LCase(t(UBound(t))) & ";" & Join(t,"\"), file End if End if Next End Sub Dim fso, ts, s, Folder Const ForWriting = 2 Const tree = "c:\videos.html" ' это результирующий файл Set s = CreateObject("Scripting.Dictionary") ' тут будет список файлов Set fso = CreateObject("Scripting.FileSystemObject") ' это объект для работы с файловой системой ' если результирующий фай уже есть - открываем его, иначе создаём if fso.FileExists(tree) Then Set ts = fso.OpenTextFile(tree, ForWriting, True) else Set ts = fso.CreateTextFile(tree, True) end if f = Split("d:\,e:\,f:\",",") ' массив с папками или дисками, где будет поиск ' записывае шапку для html страницы ts.write " <html><head><meta charset='CP1251' /><meta http-equiv='content-type' content='text/html; charset=CP1251'/><meta name='author' content='Vasiliy Mikhaylov' /><title>video files</title></head><body><style>*{margin:0;padding:0; box-sizing:border-box;}html{font-size:76.5%; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;}html,body{background-color: #f7f7f7;}body{padding: 20px 5%;}table{border-collapse: collapse;}h1,h2{text-align: center;padding: 10px 0;}h2{color: #820000;}.file-list{margin: 0 auto;background-color: #fffff0;width:90%;}td,th{padding: 5px;border:1px solid gray;word-break: break-word;}th{text-align:center;font-weight:bold;}.small{font-size:.8em;}</style><script type="text/javascript">function abc(t){alert(t.attributes['data'].value)}</script><h1>Список фильмов</h1><table class='file-list'><tr><th>№</th><th>Название</th><th>Папка</th><th>Размер</th><th>Дата</th></tr>gt;" ' перебор массива с заданными папками, накопление списка файлов For i = 0 To UBound(f) Set Folder = fso.GetFolder(f(i)) listFile Folder, s Next ' сортировка массива по ключам k = s.Keys for i = 1 to UBound(k) for j = 0 to UBound(k)-1 if k(j) > k(j+1) Then v = k(j) k(j) = k(j+1) k(j+1) = v End if Next Next ' формирование таблицы с файлами: название, путь, размер, дата i = 1 For Each itm In k if Mid(itm,1,1) <> wrd Then wrd = Mid(itm,1,1) ts.write "<tr><td colspan='5'><h2>gt;" & wrd & "</h2></td></tr>gt;" End if m = Split(itm,";") d = CDate(s.Item(itm).DateLastModified) ts.write "<tr class='box'><td>" & i & "</td><td><a onclick='abc(this)' href='#' data='" & s.Item(itm).Path & "'><b>" & m(0) & "</b></a></td><td class='small'>" & m(1) & "</td><td class='small'>" & Round(s.Item(itm).Size/1024,3) & " Kb.</td><td class='small'>" & d & "</td></tr>" i = i+1 Next ts.write " </table></body></html>gt;" ' закрываем файл с таблицей и сообщаем сколько файлов было найдено ts.close msgbox "video files = " & (UBound(k) + 1),0,"video"