воскресенье, 30 октября 2016 г.

Переместить файлы по маске в папки, соответствующие маскам


В источнике выделяется энное количество папок, в которых есть файлы. 
В получателе открывается другая папка. 
Как из выбранных в источнике папок скопировать/переместить только содержащиеся в них файлы, а не сами папки? (тип файлов не имеет значения). 
Знаю, можно использовать поиск в выбранных папках. Потом вывести найденный файлы на панель и нажать F6. Это долго! 

Ответ ещё проще. Открыть в исходной панели корневую папку, включающую всё необходимое, перейти в режим показа файлов без подкаталогов (Ctrl+B) - и копировать. Но если в разных исходных подкаталогах есть одноимённые файлы, хорошенький конфликт имён при копировании гарантирован. Внимательно следить за запросами на перезапись!






TOTAL COMMANDER 9





Код:
'=================== VBS ===================
Переместить файлы из каталога под курсором
' в папки с именами соответствующих им масок
' Параметр: %V
'===========================================
Option Explicit: Dim Filt, Fold, FSO, ShAp, Items, Mask, Name, Path
'===================== Маски файлов через "|" =====================
Filt = "1*.*|*name*|name*.txt|name 1.txt|name 1*.txt|name *1.*|" &_
"*2*|2.txt|name2.txt|name 2.txt|name *2.txt|name 2*.*|name 2.*|" &_
"*3*.txt|name 3.*|name3.txt|name 4.txt|name *4*.txt|*5*|*5*.txt"
'==================================================================
Fold = WScript.Arguments(0)
Set FSO  = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(Fold) Then WScript.Quit
Set ShAp = CreateObject("Shell.Application")
Set Fold = ShAp.NameSpace(Fold)
Set Items = Fold.Items
For Each Mask in Split(Filt, "|")
  Items.Filter 73920, Mask
  If Items.Count Then
    Name = Replace(Mask, "*", ChrW(-246))
    Path = Fold.Self.Path & "\" & Name
    If Not FSO.FolderExists(Path) Then Fold.NewFolder(Name)
    ShAp.NameSpace(Path).MoveHere Items
  End If
Next

4 коммент.:

  1. Total Commander - поиск нескольких файлов одновременно

    достаточно в строке поиска (Alt + F7) указать имена файлов через точку с запятой - ;

    Код: [Выделить]
    logo.gif;MSI_FAQ.txt

    Если к примеру расширения файлов неизвестны:
    Код: [Выделить]
    logo*;MSI*

    ОтветитьУдалить
  2. И несколько слов об использовании шаблонов файлов в Total Commander. Для тех, кто «не в теме», скажу только, что альтернативный менеджер файлов, очень популярный, хотя и платный. Описывать его возможности здесь не буду — это получится целая книга! А об одном удобном способе поиска и выделения определенных типов файлов скажу.

    Выделение файлов в Total Commander

    Вот посмотрите на скриншоте, какие доступны способы выделения:

    Выделение по заданному шаблону

    Нажмите клавишу + на цифровой клавиатуре (это справа). Его еще обозначают Gray+ или Num+. Или выберите одну из команд выделения (Выделить группу / Снять выделение группы) в меню Выделение. Затем в появившемся диалоге введите нужный вам тип файла (например, *.txt). Вы можете также указать несколько типов файлов, которые должны быть выделены, и даже те типы файлов, которые выделять не нужно! Их следует отделить символом вертикальной черты «|».

    Пример 1: w*.*|*.bak *.old - выделить все файлы, которые начинаются с w и не заканчиваются .bak или .old.

    Пример 2: |*.exe — выделить все файлы, кроме программ.

    Выделить по расширению

    Выбрав файл с нужным вам расширением, нажмите сочетание клавиш Alt+Num + (или Alt+Num –), чтобы выделить все файлы с таким же расширением в текущей панели или, соответственно, снять выделение с этих файлов.

    Удобно!

    ОтветитьУдалить
  3. Как я уже писал, Total Commander имеет очень мощный функционал для работы с файлами. Очень часто необходимо произвести какое-то действие с группой файлов:

    копирование/перемещение/перенос на ФТП
    переименование
    удаление
    архивирование и т. д.
    Но для начала файлы необходимо выделить. Есть несколько вариантов:

    пробел. Тут просто нажали – выделили, нажали еще раз – сняли выделение
    клавиша Insert. Более удобная. Похожа на пробел, но после выделения курсор перескакивает на следующий файл. Удобно, когда вам необходимо выделить несколько файлов подряд.
    глобально выделить все файлы в папке можно клавишей «*» или сочетанием Ctrl+A
    А теперь более интересные варианты с использованием левой кнопки мышки в сочетании с клавишами Ctrl и Shift. Я пользуюсь именно этим способом, так как очень быстро и удобно. Тут все просто. Итак:

    с клавишей Shift. Просто кликаете мышкой на первом файле диапазона, а потом, удерживая клавишу Shift на последнем файле. Все, файлы от «первого» до «последнего» выделены.
    с клавишей Ctrl. Выделяются отдельные файлы (не диапазон). Этим вариантом удобно пользоваться после выделения с Shiftом. То есть Shiftом выделили диапазон и Ctrlом добавили отдельные файлы по необходимости.
    Еще есть более мощный способ выделения «по маске». По маске можно как выделить файлы, так и снять выделение. Выделение по маске делается с помощью клавиши «+», а снятие «-» на дополнительной клавиатуре. После нажатия этих клавиш появляется окно, в котором вам предлагается ввести непосредственно маску.
    Ну и какие варианты маски можно использовать. Расскажу просто на примерах, а уже на их основе вы можете «творить» свои собственные:

    *gaz*.* - по этой маске выделяются все файлы, в имени которых присутствует «gaz» (начало и окончание имени может быть любое) и с любым расширением
    *.jp* - по этой маске выделяются файлы с любым именем и расширением, которое начинается на «jp». То есть будут выбраны файлы с расширением .jpg, .jpeg и т.д.
    kont*.pdf – будут выбраны файлы, имя которых начинается на «kont», окончание может быть любым, а расширение только .pdf. То есть это файлы kontur.pdf, kontakt.pdf, kontik.pdf и т .д.
    ???sun*.* - будут выбраны файлы, имя которых начинается с любых трех символов, дальше идет «sun», потом любое окончание и любое расширение.
    И так далее. То есть «*» означает любое количество любых символов, а «?» - любой ОДИН символ. И комбинируя разные вариации, вы можете выделить именно те файлы, которые вам необходимы, и делать любые операции с этими выделенными файлами.

    Так же можно комбинировать выделение по маске «+» и снятие выделения по маске «-». То есть в первом случае выделили большую группу файлов и потом сняли выделение «-» с ненужных файлов.

    ОтветитьУдалить
  4. Я когда-то тоже сталкивался с поиском большого числа файлов из списка в подкаталогах. Пытался это сделать поиском, но в связи с ограничением строки, нашлось два решения
    1.Если файл список содержит конкретные файлы (без звёздочек)
    - cm_DirBranch (раскрытие подпапок)
    - cm_LoadSelectionFromFile (загрузка выделения из файла)
    - cm_ShowOnlySelected (показать только выделенное)
    вот и все искомые файлы на панели...

    2 способ. Использование плагина FileX, где в ini файле я вписал около 4000 файлов по дести секциям по 400 файлов
    секция_1=(400 файлов разделённые ":")
    секция_2=...
    ...

    В строке можно использовать "*", "?", "|"
    Дальше настраиваешь новый набор колонок - и в результате нужные файлы видны
    Можно сделать шаблон для поиска, с помощью которого можно
    - искать по шаблону
    - выделять по шаблону
    - копировать по шаблону
    .....
    Может это не совсем то, но мне помогло когда-то (смотря конечно какие файлы и маски)

    ОтветитьУдалить