Выделить файлы по созданному списку

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Nik, d-view, Моторокер, Avada, CaptainFlint

Аватара пользователя
Wankuwer
Сообщения: 3
Зарегистрирован: Пт окт 19, 2012 12:39
Откуда: Москва

Выделить файлы по созданному списку

Сообщение Wankuwer »

Всем привет и сразу к делу.

1) Есть файл (Список) D:/Data.txt его содержимое:
  • Tumba
    Avto
    Luk
    Planeta

2) В директории D:/Arhiv/ Находятся файлы:
  • Nanunaki.jpg
    Tumba.jpg
    Avto.jpg
    Robot.jpg
    Semki.jpg
    Luk.jpg
    Planeta.jpg
    Lef.jpg


Вопрос: Как автоматом выделить файлы, имена которых есть в текстовом документе Data.txt ?

Просмотрел множество форумов, но конкретного и простого ответа не нашёл, возможно плоха смотрел, но сил уже просто нет. Речь идет о огромном массиве файлов (свыше 600 файлов), а также о n-ом наличии имен в текстовом документе, следовательно самостоятельное выделение файлов - утомительная и затратная по времени "работа".
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Используем Script Content Plugin.
Содержимое script.ini:
Код:

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

[Script] 
Section=General 

[General] 
LongName=0
ParseDirs=0
Script=General.vbs
В каталоге плагина должен лежать файл General.vbs с содержимым:

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

'===========================================================================
' Колонка Result возвращает признак наличия файла\каталога в указанном файле-списке:
'   0 - файл\каталог НЕ найден; 1 - файл\каталог найден
'===========================================================================

'========== Изменяемые параметры ===========================================
Const FileList = "D:/Data.txt" 'Файл-список
'===========================================================================

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
content = Result
Set FSO = Nothing

Function Result
  Dim List, dlm
  Result = 0
  If Not FSO.FileExists(FileList) Then
    Exit Function
  End If 
  
  On Error Resume Next
  List = FSO.OpenTextFile(FileList, ForReading, False).ReadAll
  If Err.Number <> 0 Then
    Exit Function
  End If
  On Error GoTo 0
  
  dlm = vbNewLine
  If InStr(1, dlm & List & dlm, dlm & FSO.GetBaseName(filename) & dlm, vbTextCompare) > 0 Then
    Result = 1
  End If
End Function
Как пользоваться для поиска.
Для выделения меняются пункты:
6. Нажать клавишу Num+. Нажать кнопку "Шаблон..."
13. Нажать "Записать". Ввести имя нового шаблона поиска, нажать "ОК". Нажать "ОК" для выбора шаблона.
14. Радоваться выделению файлов.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Wankuwer
Сообщения: 3
Зарегистрирован: Пт окт 19, 2012 12:39
Откуда: Москва

Сообщение Wankuwer »

Batya - ОГРОМНОЕ ВАМ СПАСИБО!!!
Все заработало!
Благодаря Вам, Праблема - РЕШЕНА! :wink:
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Есть также способ без дополнительных приспособлений. Копируем файл со списком имён в папку D:/Arhiv, к каждому имени добавляем расширение (на раз-два в любом редакторе, поддерживающем регулярные выражения: заменить $ на .jpg), чтобы имена были полными (можно использовать маски):
Tumba.jpg
Avto.jpg
Luk.jpg
Planeta.jpg
Tumba.*
Avto.*
Luk.*
Planeta.*
Далее копируем путь к файлу списка, открываем поиск в тотале и в поле "Место поиска" указываем @ и путь к файлу-списку. Запускаем. Посылаем результат на панель, делаем что требуется.

Пути в файле-списке должны быть относительно папке, где файл списка лежит. Если он лежит в папке с файлами, то достаточно просто имён.
Аватара пользователя
Wankuwer
Сообщения: 3
Зарегистрирован: Пт окт 19, 2012 12:39
Откуда: Москва

Сообщение Wankuwer »

MVV к большому сожалению, не работает, вот скрин.

Текстовый документ Data.txt который лежит там же где и файлы (D:\Arhiv) содержит:
  • Ananas.jpg
    Zebra.jpg

Файлы в дериктории: D:\Arhiv
  • Ananas.jpg
    Kokos.jpg
    Planeta.jpg
    Zebra.jpg
    Data.txt

В Total Commander жму Alt+7
  • Искать файлы: Оставляю пустым.
    Место поиска: @ "D:\Arhiv\Data.txt"
    Место поиска: @ D:\Arhiv\Data.txt
    Место поиска: @ D:\Arhiv
На все попытки: Указанного пути не существует!

Способ предложенный Batya работает отлично. Сложности могут возникнуть у тех, кто не хочет заворачиваться на начальном этапе и прибегать к дополнительным плагинам.

То что предлагайте Вы, так же интересно! Можно по подробнее?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Wankuwer писал(а): Указанного пути не существует!
Надо обновить версию тотала.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Wankuwer
Эта фича работает только в TC версий 8.0 и выше. Подробности — в справке.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Кроме того, не надо ставить пробел между собакой @ и путём к списку.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

MVV писал(а):Tumba.*
Avto.*
Luk.*
Planeta.*
? а нельзя просто

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

Tumba 
Avto 
Luk 
Planeta
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Tol!k писал(а):? а нельзя просто
Ну я как бы проверял. :wink:
Sergiusnet
Сообщения: 11
Зарегистрирован: Вт дек 11, 2012 11:05

Сообщение Sergiusnet »

А если нужно найти не файлы, а папки, как тогда быть?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Убрать * на конце, но тогда будут найдены ещё и одноимённые файлы без расширений.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Sergiusnet
Сообщения: 11
Зарегистрирован: Вт дек 11, 2012 11:05

Re: Выделить файлы по созданному списку

Сообщение Sergiusnet »

Wankuwer
выделить все нужные файлы по списку можно скопировав имена в буфер и через меню выделение-загрузить выделение из буфера, скриптов никаких не нужно и поисков
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Sergiusnet
А попроще никак? Зачем что-то копировать в буфер, когда по исходному условию в каталоге уже есть текстовик с именами файлов? Выполняем команду "Загрузить выделение из файла" (cm_LoadSelectionFromFile) — и всё.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Slamzor
Сообщения: 19
Зарегистрирован: Вс май 26, 2013 19:24

Сообщение Slamzor »

Добрый вечер!
У меня файлы в папке, имеют следующие названия: некий шифр(заканчивается на две латинские буквы и четыре цифры - FI00021 в примере)_имя_версия_дата(год_месяц_день).
Нужно разделить файлы на две "корзины", с помощью колонки из екселя-списка. В этом списке есть имена.

Вопрос, как можно выделить, чтобы впоследствии скопировать файлы по списку, учитывая дату создания. Нужны файлы с последней датой.
Пример:
50_3_МКО_06_FI00021_Отчет_01_2013_03_23

Что сделал:
1. Установил Script Content Plugin ( в настройках отображен-C:\program files\ ... \script.wdx
2. Const FileList = "C:FileList.txt" 'Файл-список.
3. В General прописал путь C:FileList.txt.
4. В FileList вношу строку для поиска Отчет.
5. Выполняю
Для выделения меняются пункты:
6. Нажать клавишу Num+. Нажать кнопку "Шаблон..."
13. Нажать "Записать". Ввести имя нового шаблона поиска, нажать "ОК". Нажать "ОК" для выбора шаблона.
14. Радоваться выделению файлов.
7.Получаю выделение всех файлов
Где я ошибся?
Ответить