Batya
|
Posted: Mon Jan 24, 2011 19:01 Post subject: |
|
|
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
|
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|