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 

Рекурсивная пофайловая упаковка
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Aug 08, 2011 17:50    Post subject: Reply with quote

Flasher wrote:
Остановлюсь, пожалуй, на одной дополнительной папке вместо относительного пути. Для создания вложенных цикл нужен, не хочу этим перегружать скрипт.

Рекурсивная процедура:
Code:
'Создание дерева папок
Sub CreateFoldersTree(pFolder)
  Dim lParentFolder
  If Not FSO.FolderExists(pFolder) Then
    lParentFolder = FSO.GetParentFolderName(pFolder)
    If Not FSO.FolderExists(lParentFolder) Then
      CreateFoldersTree(lParentFolder)
    End If
    FSO.CreateFolder(pFolder)
  End If
End Sub

_________________
Нет, я не сплю. Я просто медленно моргаю.


Last edited by Batya on Mon Aug 08, 2011 17:57; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Aug 08, 2011 17:57    Post subject: Reply with quote

Да как делать понятно, просто не вижу вариантов, когда глубина может понадобиться. Одной папки, ИМХО, будет достаточно:
Code:
  If InStr(P, ":") > 0 Then
    Path = P
  Else
    PP = F1.ParentFolder & "\" & P
    If FSO.FolderExists(PP) Then
      Path = PP & "\"
    Else Path = FSO.CreateFolder(PP) & "\"
    End If
  End If
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Aug 08, 2011 18:01    Post subject: Reply with quote

Поправил предыдущий пост.

Кусок кода для любой глубины:
Code:
  If InStr(P, ":") > 0 Then
    Path = P
  Else
    Path = F1.ParentFolder & "\" & P
  End If
  CreateFoldersTree Path

'...

'Создание дерева папок
Sub CreateFoldersTree(pFolder)
  Dim lParentFolder
  If Not FSO.FolderExists(pFolder) Then
    lParentFolder = FSO.GetParentFolderName(pFolder)
    If Not FSO.FolderExists(lParentFolder) Then
      CreateFoldersTree(lParentFolder)
    End If
    FSO.CreateFolder(pFolder)
  End If
End Sub

При этом можно во втором параметре сразу задать ещё не существующий путь.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Aug 08, 2011 18:17    Post subject: Reply with quote

Нет, ну сам подумай, пихать архивы на какую-то непонятную глубину - бред. А если в зоне одного каталога создавать одну папку, то лучше уж не для каждого файла производить запуск, а прописывать в одну строчку, как с Str здесь.
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Mon Aug 08, 2011 20:56    Post subject: Reply with quote

..Да, жаркая разгорается дискуссия: но мне (и возможно, кому-то ещё), как "простому пользователю", важно чтобы скрипт не превратился в некую головоломку, или вариант конструктора - "сделай сам", а возможно, стал более удобным инструментом для работы с Total Commander, чем тот вариант, который он из себя представляет. И поэтому, есть просьба, - если скрипт будет меняться, и в нём появятся дополнительные опции(обсуждаемые ваше), предлагаю внесённые изменения отображать в виде "всплывающего окна". Например- перед запуском архивации появляется окно - вариант выбора при совпадении одинаковых имен в процессе архивации- ("имя"+буква+счетчик или "имя"+цифра+счетчик), и второе окно - если необходима архивация
Batya wrote:
Например, я хочу, чтобы для каждого выделенного файла архив создавался в папке Arc рядом с файлом
для такого варианта: -Например введите 1 или 0. Просто это на мой взгляд будет удобнее, чем каждый раз "лесть" в код скрипта, и там что-то менять: особенно, если у него солидный размер. Надеюсь на понимание. Заранее благодарен.

Last edited by shveicar on Mon Aug 08, 2011 20:59; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Aug 08, 2011 20:58    Post subject: Reply with quote

shveicar
Волноваться нечему. Там всего один второй параметр, всё что заменится это 1 на "" либо на "имя папки". О правке кода я сам сообщу.

Добавлено: переименование по счётчику при совпадении полных имён.
Добавлено: новое условие для второго параметра - возможность создавать папку рядом с исходником и создавать в ней архив.
См. шапку скрипта.
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Tue Aug 09, 2011 15:17    Post subject: Reply with quote

Flasher wrote:
Добавлено: переименование по счётчику при совпадении полных имён
Отлично работает, проблем нет. А вот с этим
Flasher wrote:
Добавлено: новое условие для второго параметра - возможность создавать папку рядом с исходником и создавать в ней архив
Настоящие чудеса. - происходит следущее: Все архивы создаются внутри первой папки, причем вкладываются как "матрешки" одна в другую - получается множество вложенных (одна в другую) папок с архивами, боюсь, что если файлов много, может не хватить длинны путей.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Aug 09, 2011 15:23    Post subject: Reply with quote

shveicar wrote:
Все архивы создаются внутри первой папки, причем вкладываются как "матрешки" одна в другую - получается множество вложенных (одна в другую) папок с архивами, боюсь, что если файлов много, может не хватить длинны путей.
Странно, не должно такого быть. Должно быть так: создаётся папка внутри каждой папки, и туда складываются только те архивы, файлы внутри которых были расположены в одном каталоге.
За длину в этом скрипте можно особо не беспокоится, т.к. идёт пофайловая упаковка, а не по строке-списку, как в скрипте параллельной темы.

Добавлено: Так, секундочку, в первой папке действительно матрёшка, что-то не замечал раньше, попробую выявить причину.

Добавлено спустя 48 минут:

В общем, логика понятна. Матрёшка создаётся, потому что пролистываются все папки в стуктруре, в т.ч. и только что созданные. Единственное, что пока приходит на ум - это ограничить эту возможность фильтром. Т.е. если фильтр в 4 параметре задан, и расширение файла не совпадает с расширением архива, то создавать папку, если нет, то паковать рядом. Сойдёт?
Если, конечно, у кого-то получше идеи не появится.
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Tue Aug 09, 2011 19:16    Post subject: Reply with quote

А если ограничить глубину вложенности, уровнем1? а создаваемые папки будут иметь автонумерацию? хотя, тут совет от - Batya бы пригодился.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Aug 09, 2011 19:21    Post subject: Reply with quote

shveicar wrote:
А если ограничить глубину вложенности, уровнем1?
Это не вариант для рекурсии.
shveicar wrote:
а создаваемые папки будут иметь автонумерацию?
Нет. Зачем? Я же выше объяснил, что должно происходить.
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Tue Aug 09, 2011 19:56    Post subject: Reply with quote

Flasher wrote:
Т.е. если фильтр в 4 параметре задан, и расширение файла не совпадает с расширением архива, то создавать папку, если нет, то паковать рядом. Сойдёт?
Если я правильно понял -тогда, получается - что будет произведена упаковка, не для выбранных в фильтре файлов, а для всего содержимого вложенных папок (только по разному принципу)? а ведь это может быть не всегда удобно.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Aug 09, 2011 20:12    Post subject: Reply with quote

Как это не для выбранных? Как раз только для выбранных.

Добавлено спустя 32 минуты:

Можно ещё сравнивать имя создаваемой папки и родительской, если не совпадают, то упаковывать. Только в таком случае в параметрах придётся писать имя, которое точно в структуре выбранных папок не окажется.
Подходит?
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Tue Aug 09, 2011 20:45    Post subject: Reply with quote

Ну, тогда можно попробовать такой вариант, практика покажет..
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Aug 09, 2011 20:55    Post subject: Reply with quote

Сделал и указал на это в описании параметра.
Хотя проблем с глубиной фактически нет. Не будут паковаться только выделенные архивы с указанным расширением и архивы на первом уровне выделенных папок, рядом с которыми уже есть папка (с указанным в параметрах именем) с одноимёнными архивами.

Add: Кое-что важное в строках 113-117 поправил.
Back to top
View user's profile Send private message
shveicar



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

Post (Separately) Posted: Wed Aug 10, 2011 15:15    Post subject: Reply with quote

Еще раз проверил скрипт, недоразумений не нашел -все работает, Спасибо за проделанную работу.
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
Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next
Page 2 of 7

 
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