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 

Воспроизведение в структуре каталогов недостающих файлов

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed May 09, 2012 00:19    Post subject: Воспроизведение в структуре каталогов недостающих файлов Reply with quote

Здравствуйте.
Созданная тема, является логическим продолжением данной
темы в виду изменения в ней поставленной задачи, и в связи с отсутствием окончательного решения.
На данный момент, пытаюсь решить такую проблему:
Есть определенная структура каталогов, с разными именами, и разными уровнями вложенности.
Во многих каталогах, присутствуют различные типы файлов (графика, мультимедиа, и другие, в том числе могут находится и файлы с расширениями htm,html).
Моя задача, поместить в определенные каталоги,(отсчёт глубины может задаваться в окне, и производится от корня диска 0,1,2,3 и т.д) - определенное количество html файлов, (количество файлов также, может быть заданно в окне при помещении) ясно, что в каждый из каталогов, находящихся на одном уровне, - попадет одинаковое количество файлов.
В случае совпадения, с именем уже существующих в каталоге html файлов, должно произойти автоматическое переименование по счетчику, пример: - имя_файла(1).html.
Сами html файлы в итоге,- должны иметь имена тех же каталогов,- в которые они помещаются, и создаваться из одного (исходного шаблона) html.
В принципе можно использовать групповое переименование после их помещения, но если есть единое, комплексное, - решение это будет удобнее.
В дальнейшем, будет выполнено редактирование созданных файлов для их взаимосвязи с другими файлами.(но это уже отдельно)
Как лучше это осуществить. Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed May 09, 2012 01:11    Post subject: Reply with quote

shveicar wrote:
ясно, что в каждый из каталогов, находящихся на одном уровне, - попадет одинаковое количество файлов.
А на другом, получается, другое количество?
И как это кол-во определять? Как именовать копии?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed May 09, 2012 01:27    Post subject: Reply with quote

Flasher Спасибо за отклик, доброй ночи.
Flasher wrote:
А на другом, получается, другое количество?

А как могут на другом уровне возникнуть файлы, если речь идет о изначально заданной глубине вложенности? Только если повторно использовать скрипт, с другими параметрами..
Например: выделяем каталог с многоуровневой структурой. (файл шаблона находится в той же папке что и скрипт). В начале, появляется окно с уровнем глубины, а затем окно с количеством создаваемых файлов.
При такой схеме, будет удобно использовать для разных уровней - своих, индивидуальных шаблонов, что в дальнейшем позволит упростить их последующую схему редактирования.
Quote:
Как именовать копии?

Изначально имя шаблона - например: shablon.html (это удобно, поскольку совпадения такого имени -маловероятны) - имеется ввиду возможный сценарий, с последующим групповым переименованием..
В этом случае, при создании копий будут последовательно добавляться цифры, например: shablon1.html, shablon2.html и тд. Если вдруг, все таки - в каталоге будет находиться файл с таким именем, - то к оригинальному имени будет добавляться еще одна цифра в скобках, например: shablon1(1).html
Если групповое переименование, можно задействовать сразу, при копировании, тогда схема та же, только в начале имени html файла -добавиться имя каталога, в который файлы перемещаются, например: folder1_shablon1.html это еще удобнее, поскольку такие файлы сразу будут выделятся, и их имена, в дальнейшем, можно всегда изменить.


Last edited by shveicar on Wed May 09, 2012 01:52; edited 3 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed May 09, 2012 19:20    Post subject: Reply with quote

Пробуем:
Code:
'=============================================================================
' Создание копий файла на указанной глубине вложенности в выделенных папках
' Приставка к имени копии файла = имени родительской папки

' Параметры: %L "<путь к файлу-шаблону>"
'=============================================================================
With WScript.Arguments
  C = .Count : If .Count = 0 Then WScript.Quit
  If C < 2 Then MsgBox "Укажите оба параметра!", 48
  List = .Item(0) : Templ = .Item(1)
End With : Const M = 1

Msg Count, " копий файла:"
Msg Depth, ", определяющее глубину вложенности от корня диска:"
Sub Msg(Sum, Word)
  L = vbNewline : Sum = ""
  Do Until IsNumeric(Sum)
    Sum = InputBox(L&L&L&L&L& "Введите число" & Word,_
    "Создание копий на нужной глубине", 3)
    If Trim(Sum) = "" Then WScript.Quit
  Loop
End Sub

Set FSO = CreateObject("Scripting.FileSystemObject")
Name = FSO.GetFileName(Templ) : BName = FSO.GetBaseName(Templ)
Ext  = FSO.GetExtensionName(Name)
With FSO.OpenTextFile(List, 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FolderExists(F) Then ForFolders F, Depth, Count, Name, BName, Ext, Templ
    End If
  Loop : .Close
End With : Set FSO = Nothing : WScript.Quit

Sub ForFolders(Fold, D, Cnt, FName, BN, E, Tml)
  Set SubF = FSO.GetFolder(Fold).SubFolders
  If SubF.Count > 0 Then 
    For Each Folder in SubF
      Max = UBound(Split(Folder, "\")) + 1
      If Max = Abs(D) Then
        FoldName = FSO.GetFileName(Folder) : BN1 = FoldName & "_" & BN
        For i = 1 to Cnt
          N1 = FoldName & "_" & FName : l = 0
          Do While FSO.FileExists(Folder & "\" & N1)
            l = l + 1
            If l < 10^M Then PostFix = Right(String(M, "0") & l, M) Else PostFix = l
            N1 = BN1 & " (" & PostFix & ")." & E
          Loop
          FSO.CopyFile Tml, Folder & "\" & N1
        Next
      ElseIf Max < Abs(D) Then ForFolders Folder, D, Cnt, FName, BN, E, Tml
      End If
    Next
  End If
End Sub


Last edited by Flasher on Sat May 12, 2012 19:40; edited 1 time in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed May 09, 2012 21:33    Post subject: Reply with quote

Flasher
Просто "Волшебство" Что еще можно добавить...
Разве, только, - Большое Спасибо, за проделанную работу. Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group