Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Создание списка файлов выборочно по расширениям 
Author Message
Batya



PostPosted: Mon Jan 24, 2011 19:01    Post subject: Reply with quote

Flasher wrote:
Я, конечно, извиняюсь, но разве с его задачей скрипт не должен называться "... относительно выделенных папок" ?

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

dude wrote:
Я имел в виду создание списка файлов по расширению для одного выделенного каталога с подкаталогами в один текст. файл.

А я спрашиваю, что делать, если выделено несколько.
Пока не совсем въехал, когда вставлять перед новой папкой пустые строки, а когда - нет. Попробуй пока такой вариант:
Code:
'=====================================================================
' Создание списка файлов относительно текущей папки
'   для заданных расширений файлов

' Параметры:
' {исходный файл-список|папка} {требуемый файл-список} {расширения}
' Если первым параметром передан путь к папке, то
'   обрабатываеются только эта папка, причём она считается текущей.
' Если для параметра {требуемый файл-список} указан не полный путь, то
'   файл-список создаётся в текущей папке.
' Список расширений чередуется символом ","

' Примеры параметров при вызове из TC:
' %L "C:\Путь\Файл-список.txt" "avi,mov,mkv"
' %P%N "Файл-список.txt" "jpeg,bmp"
'=====================================================================

Dim FSO, FolderMode, FF, F, List, CurrentFolder, TargetList, LenCF, EXT, E
Set FSO = CreateObject("Scripting.FileSystemObject")
Set EXT = CreateObject("Scripting.Dictionary")

FF         = WScript.Arguments(0)
TargetList = WScript.Arguments(1)
FolderMode = FSO.FolderExists(FF)
For Each E In Split(WScript.Arguments(2), ",")
  EXT.Add LCase(Trim(E)), ""
Next

If FolderMode Then
  CurrentFolder = FF
Else
  CurrentFolder = CreateObject("WScript.Shell").CurrentDirectory
End If
If Right(CurrentFolder, 1) <> "\" Then CurrentFolder = CurrentFolder & "\"
LenCF = Len(CurrentFolder)

If InStr(TargetList, ":") = 0 Then TargetList = CurrentFolder & TargetList

If FolderMode Then
  List = Process(CurrentFolder, 0)
Else
  With FSO.OpenTextFile(FF, 1)
    Do While Not .AtEndOfStream
      F    = .ReadLine
      List = List & Process(F, 0)
    Loop
  End With
End If

FSO.CreateTextFile(TargetList, True, True).Write List

Set FSO = Nothing
Wscript.Quit()

Function Process(pPath, pLevel)
  Dim lF
  If FSO.FileExists(pPath) Then
    If EXT.Exists(LCase(FSO.GetExtensionName(pPath))) Then Process = Space((pLevel + 1) * 2) & Cut(pPath)
  End If
  If FSO.FolderExists(pPath) Then
    Process = Process & String(pLevel * 2, "-") & UCase(FSO.GetFileName(pPath)) & vbNewLine
    For Each lF in FSO.GetFolder(pPath).Files
      If EXT.Exists(LCase(FSO.GetExtensionName(lF))) Then Process = Process & Space((pLevel + 1) * 2) & Cut(lF) & vbNewLine
    Next
    For Each lF in FSO.GetFolder(pPath).SubFolders
      Process = Process & Process(lF, pLevel + 1)
    Next
  End If
End Function

Function Cut(pPath)
  Cut = FSO.GetFileName(pPath)
End Function

_________________
Нет, я не сплю. Я просто медленно моргаю.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group