Страница 2 из 7

Добавлено: Пн авг 08, 2011 17:50
Batya
Flasher писал(а):Остановлюсь, пожалуй, на одной дополнительной папке вместо относительного пути. Для создания вложенных цикл нужен, не хочу этим перегружать скрипт.
Рекурсивная процедура:

Код: Выделить всё

'Создание дерева папок
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

Добавлено: Пн авг 08, 2011 17:57
Flasher
Да как делать понятно, просто не вижу вариантов, когда глубина может понадобиться. Одной папки, ИМХО, будет достаточно:

Код: Выделить всё

  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

Добавлено: Пн авг 08, 2011 18:01
Batya
Поправил предыдущий пост.

Кусок кода для любой глубины:

Код: Выделить всё

  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
При этом можно во втором параметре сразу задать ещё не существующий путь.

Добавлено: Пн авг 08, 2011 18:17
Flasher
Нет, ну сам подумай, пихать архивы на какую-то непонятную глубину - бред. А если в зоне одного каталога создавать одну папку, то лучше уж не для каждого файла производить запуск, а прописывать в одну строчку, как с Str здесь.

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

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

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

Добавлено: Вт авг 09, 2011 15:17
shveicar
Flasher писал(а):Добавлено: переименование по счётчику при совпадении полных имён
Отлично работает, проблем нет. А вот с этим
Flasher писал(а):Добавлено: новое условие для второго параметра - возможность создавать папку рядом с исходником и создавать в ней архив
Настоящие чудеса. - происходит следущее: Все архивы создаются внутри первой папки, причем вкладываются как "матрешки" одна в другую - получается множество вложенных (одна в другую) папок с архивами, боюсь, что если файлов много, может не хватить длинны путей.

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

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

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

В общем, логика понятна. Матрёшка создаётся, потому что пролистываются все папки в стуктруре, в т.ч. и только что созданные. Единственное, что пока приходит на ум - это ограничить эту возможность фильтром. Т.е. если фильтр в 4 параметре задан, и расширение файла не совпадает с расширением архива, то создавать папку, если нет, то паковать рядом. Сойдёт?
Если, конечно, у кого-то получше идеи не появится.

Добавлено: Вт авг 09, 2011 19:16
shveicar
А если ограничить глубину вложенности, уровнем1? а создаваемые папки будут иметь автонумерацию? хотя, тут совет от - Batya бы пригодился.

Добавлено: Вт авг 09, 2011 19:21
Flasher
shveicar писал(а):А если ограничить глубину вложенности, уровнем1?
Это не вариант для рекурсии.
shveicar писал(а):а создаваемые папки будут иметь автонумерацию?
Нет. Зачем? Я же выше объяснил, что должно происходить.

Добавлено: Вт авг 09, 2011 19:56
shveicar
Flasher писал(а):Т.е. если фильтр в 4 параметре задан, и расширение файла не совпадает с расширением архива, то создавать папку, если нет, то паковать рядом. Сойдёт?
Если я правильно понял -тогда, получается - что будет произведена упаковка, не для выбранных в фильтре файлов, а для всего содержимого вложенных папок (только по разному принципу)? а ведь это может быть не всегда удобно.

Добавлено: Вт авг 09, 2011 20:43
Flasher
Как это не для выбранных? Как раз только для выбранных.

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

Можно ещё сравнивать имя создаваемой папки и родительской, если не совпадают, то упаковывать. Только в таком случае в параметрах придётся писать имя, которое точно в структуре выбранных папок не окажется.
Подходит?

Добавлено: Вт авг 09, 2011 20:45
shveicar
Ну, тогда можно попробовать такой вариант, практика покажет..

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

Add: Кое-что важное в строках 113-117 поправил.

Добавлено: Ср авг 10, 2011 15:15
shveicar
Еще раз проверил скрипт, недоразумений не нашел -все работает, Спасибо за проделанную работу.