Список локальных файлов, на VBS

Если у вас есть, например, коллекция видеофайлов и они разбросаны на куче дисков локального компьютера, вам наверняка хотелось иметь упорядоченный список этих файлов, в котором можно легко ориентироваться и даже найти дубликаты.

Вот рабочий код под 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>"
' перебор массива с заданными папками, накопление списка файлов
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>" & wrd & "</h2></td></tr>"
	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>"
' закрываем файл с таблицей и сообщаем сколько файлов было найдено
ts.close
msgbox "video files = " & (UBound(k) + 1),0,"video"

Вход



Регистрация