Страница 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
Еще раз проверил скрипт, недоразумений не нашел -все работает, Спасибо за проделанную работу.