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

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

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

Lex177
Сообщения: 5
Зарегистрирован: Вт дек 06, 2016 11:56

Сообщение Lex177 »

Staniclaw, спасибо за ответ. Но мне необходимо чтобы фото перемещались в свои папки с созданием оных. Стандартный инструмент этого не умеет, на сколько я знаю.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Lex177 писал(а):Стандартный инструмент этого не умеет
Попробовать-то можно, вдруг умеет.
Lex177
Сообщения: 5
Зарегистрирован: Вт дек 06, 2016 11:56

Сообщение Lex177 »

Попробовал;) не умеет.
Не просто так пишутся плагины на подобие этого (из этой ветки).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Lex177
А так?
Замена: $1\\$1_
Lex177
Сообщения: 5
Зарегистрирован: Вт дек 06, 2016 11:56

Сообщение Lex177 »

Решил!
Все оказалось не так уж сложно.
В маску для имени файла прописал \[N1-5]\[N]
Всем спасибо за участие!
Аватара пользователя
Staniclaw
Сообщения: 533
Зарегистрирован: Вс дек 12, 2010 15:37
Откуда: Ташкент

Сообщение Staniclaw »

Lex177
Тоже вариант. Так может, стоит убрать дубль?
Вечному двигателю -- вечные тормоза!..
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

скрипт "Создание дерева папок согласно разделителя в имени файла\папки"
http://forum.wincmd.ru/viewtopic.php?p=56594#56594
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Avada »

Lex177
Своевременно воспользоваться поиском по форуму и в справке оказалось настолько непосильной задачей? Проще и веселее было затеять оффтопную дискуссию в теме, изначально, если чуток разобраться, не имевшей отношения к новому вопросу?
Замечание за нарушение правил форума. Заодно удалил пародию на код (иначе назвать не могу) из этого поста, а то кто-нибудь ещё не разберётся и попытается использовать...
Оффтоп вынужден оставить на месте, поскольку у всех вариантов его переноса есть какие-то недостатки.
А отвечавшим товарищам при всём уважении к их высокой эрудиции напоминаю, что повторные вопросы о том, что сто раз уже рассмотрено, есть повод для действий модератора — и не более того.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

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

Сообщение Flasher »

Njkma, только более медленным пофайловым перебором с псевдокопированием и удалением исходников.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

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

Сообщение Flasher »

Hjkma
ОК, но не факт, что баги, если возникнут, удастся убрать:

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

'=================== VBS ===================
' Переместить файлы из каталога под курсором
' в папки с именами соответствующих им масок
' Параметр: %V
'===========================================
Option Explicit : Dim Filt, Fold, Rgx, REx, FSO, File,_
Strm, List, TName, Mask, IPath, OPath, FPath, IsMask, c
'===================== Маски файлов через "|" =====================
Filt = "12*.*|name 1.txt|name 1*.txt|name *1.*|name2.txt|2.txt|" &_
"name 2.txt|name *2.txt|name 2*.*|name 2.*|name*.txt|*name*|*2*" &_
"|name 3.*|name3.txt|*3*.txt|name 4.txt|name *4*.txt|*5*.txt|*5*"
'==================================================================
Fold = WSH.Arguments(0)
Set Rgx = New RegExp : Rgx.Global = True
Rgx.MultiLine = True : Rgx.IgnoreCase = True
Set REx = New RegExp : REx.Pattern = "([?[\]}{.^$+\-])"
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO
  If Not .FolderExists(LP(Fold)) Then WSH.Quit
  Set Strm = CreateObject("SAPI.SpFileStream")
  For Each File in .GetFolder("\\?\" & Fold).Files
    List = List & vbLf & .GetFileName(File)
  Next
  TName = .GetBaseName(.GetTempName)
  For Each Mask in Split(Filt, "|")
    Rgx.Pattern = "^" & Replace(REx.Replace(Mask, "\$1"), "*", ".*") & "$"
    If Rgx.Test(List) Then
      OPath = LP(.BuildPath(Fold, Replace(Mask, "*", ChrW(-246))))
      IsMask = InStr(OPath, ChrW(-246))
      For Each File in Rgx.Execute(List)
        IPath = LP(.BuildPath(Fold, File))
        If .FileExists(IPath) Then
          If IsMask = 0 Then
            If Left(IPath, 1) <> "\" Then
              .GetFile(IPath).Name = File & TName
            Else CreateForLong IPath, LP(IPath & TName) End If
            IPath = LP(IPath & TName)
          End If
          If Not .FolderExists(OPath) Then .CreateFolder OPath
          FPath = LP(.BuildPath(OPath, File)) : c = 2
          While FSO.FileExists(FPath)
            FPath = FPath & " (" & c & ")" : c = c + 1
          Wend : FPath = LP(FPath)
          If Left(IPath, 1) = "\" Or Left(FPath, 1) = "\" Then _
          CreateForLong IPath, FPath Else .MoveFile IPath, FPath
        End If
      Next
    End If
  Next
End With : Set FSO = Nothing
Set Rgx = Nothing : Set Strm = Nothing
MsgBox Space(16) & "Выполнено!", 4160,_
" Перемещение файлов в папки-маски      "

Sub CreateForLong(Input, OutPut)
  With Strm
    Dim Size, All : Size = FSO.GetFile(Input).Size
    .Format.Type = 1 : .Open Input, 1 : .Read All, Size : .Close
    .Open OutPut, 3, True : .Write All : All = "" : .Close
  End With : FSO.DeleteFile Input
End Sub

Function LP(F)
  LP = F : If Len(F) > 259 And Left(F, 1) <> "\" Then LP = "\\?\" & F
End Function
Последний раз редактировалось Flasher Пн фев 12, 2018 23:11, всего редактировалось 6 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Сообщения: 178
Зарегистрирован: Сб апр 18, 2015 01:26

Сообщение Hjkma »

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

Сообщение Flasher »

Hjkma
Совсем одну вещь прозевал. См. теперь.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить