Удалить часть имени в файлах с заменой

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

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

Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Т.е конфликтные имена таки есть?
Чего-то я не понял тебя. Ну да, есть, но они опять же есть только в папке с проблемным именем. Соответственно меняться должны файлы в ней (вместе с теми, что в подпапке) и перенос в безпроблемную с заменой.

ПС. В папке с проблемным именем нет подпапок с проблемными именами.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение Flasher »

Strek писал(а):Ну да, есть, но они опять же есть только в папке с проблемным именем.
Здрасте. Я же цитату привёл:
Strek писал(а):Но есть и такое, что папка без проблемного имени, но в ней содержаться файлы, например:
В контексте задачи всё, что содержит скобки и совпадает в доскобочной части с аналогом, является "проблемным".
Strek писал(а):В папке с проблемным именем нет подпапок с проблемными именами.
А там вообще есть подпапки на разной глубине?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Здрасте. Я же цитату привёл:
Теперь понял :)
Нет. Есть что-то одно, либо проблемная папка и в ней проблемные файлы (могут быть), либо без проблемная папка и в ней проблемные файлы.
Такого, чтобы и то, и другое - нет.
Flasher писал(а):А там вообще есть подпапки на разной глубине?
Вообще папки есть, но глубина не известна, так как там, как я уже упоминал - 45Гб портативного софта. Поэтому глубина может быть разной. к пример есть Brackets, а ней папка для локалхоста и естественно в ней глубина большая.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Strek писал(а):либо проблемная папка и в ней проблемные файлы (могут быть), либо без проблемная папка и в ней проблемные файлы.
Так и что с ними делать-то?
1. Переименовывать с заменой внутри родителя или сразу переносить как есть с заменой в получателе?
2. И что делать со скобками в непроблемной папке при наличии/отсутствии аналога? Оставлять как есть или тоже переименовывать?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Так и что с ними делать-то?
Блин, я ж не зря написал откуда они все взялись :)
Изначально была папка (с/без подпапками и файлами), она скопировалась после первой синхронизации в облако.
Потом я обновлял программы, файлы и т.д. и после второй синхронизации, соответствующая программа по какой-то причине не начала заменять старые версии новой, а в зависимости от ситуации возвращать на диск старые версии, а новым добавлять конфликтные имена.
Это я к тому, что такой ситуации:
Flasher писал(а): И что делать со скобками в непроблемной папке при наличии/отсутствии аналога? Оставлять как есть или тоже переименовывать?
не может быть.
Всегда нужно переименовывать проблемные имена и всегда заменять, если есть старая версия (то бишь без проблемного имени).
Исходя из всего этого:
Flasher писал(а): Переименовывать с заменой внутри родителя или сразу переносить как есть с заменой в получателе?
будет правильным вариант - переименовывать внутри и перемещать с заменой
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Strek
Т.е алгоритм такой?
1. Поиск всех файлов со скобками во всей структуре каталогов и удаление скобочной части с заменой при совпадении.
2. Поиск всех папок со скобками только на верхнем уровне и перемещение содержимого в папки без скобок при наличии с заменой одноимённых файлов.
3. Удаление опустевших папок.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Т.е алгоритм такой?
Можно заменить знак препинания. :)
Т.е. Алгоритм такой.

ПС. В общем, в "яблочко". :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Strek
[cut="Забирай:"]

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

'================================= VBS ================================
' Алгоритм действий скрипта:
' 1) Удаление <пробел>(*) справа базовых имён файлов структуры рабочего
'    каталога с автозаменой при совпадении имён с существующими файлами
' 2) Удаление в структуре рабочего каталога <пробел>(*) справа
'    имён каталогов при отсутствии таковых без удаляемой части
' 3) Перемещение с автозаменой содержимого из каталогов текущего
'    уровня с наличием в именах <пробел>(*) в каталоги без оного
' 4) Удаление опустошённых каталогов

' Условие: путь запуска — пустой
'======================================================================
Option Explicit : Dim FSO, ShA, Dir, Items, Itms, Fd
Set ShA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dir = ShA.NameSpace(FSO.GetAbsolutePathName(""))
If StrComp(Dir.Self.Path,_
FSO.GetParentFolderName(WSH.ScriptFullName),1) = 0 Then WSH.Quit
FFolder Dir : Set Items = Dir.Items: Items.Filter 73888, "* (*)"
For Each Fd In Items
  Set Itms = Fd.GetFolder.Items
  ShA.NameSpace(Left(Fd.Path, InStrRev(Fd.Path, " (") - 1)).MoveHere Itms, 5652
  If Fd.GetFolder.Items.Count = 0 Then FSO.DeleteFolder Fd.Path, 1
Next
For Each Fd in Array(Itms, Items, Dir, ShA, FSO)
  Set Fd = Nothing
Next
MsgBox Space(29) & "Выполнено!", 4160,_
"Масштабное обрезание имён объектов с автозаменой      "

Sub FFolder(Fold)
  Path = Fold.Self.Path
  Set Items = Fold.Items
  Items.Filter 73920, "* (*)*"
  Dim F, FPath, Ext, NName, Path, Name, FdPath
  For Each F in Items
    FPath = F.Path
    Ext = FSO.GetExtensionName(FPath)
    If Ext <> "" Then Ext = "." & Ext
    NName = Split(FSO.GetBaseName(FPath), " (")(0) & Ext
    If   FSO.FileExists(Path & "\" & NName) _
    Then FSO.DeleteFile Path & "\" & NName, 1
    F.Name = NName
  Next : Items.Filter 73888, "*"
  For Each Fd In Items
    Name = Fd.Name : FdPath = Fd.Path : FFolder Fd.GetFolder
    If InStr(Name, "(") Then
      NName = Split(FSO.GetFileName(FdPath), " (")(0)
      If Not FSO.FolderExists(Path & "\" & NName) Then Fd.Name = NName
    End If
  Next
End Sub
[/cut]
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Забирай:
Спаситель! Большое БлагоДарю! :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Strek
Во, а что так долго? :o Всё работает как надо?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Во, а что так долго? Surprised Всё работает как надо?
Да я не знаю. Уведомление пришло, перехожу в браузере, а "Сайт не найден". И так дня два-три. Думал может домен не проплатили или хостинг.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Strek
Уже 3-й день как доступен. Важнее было бы на второй вопрос ответить.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Strek
Сообщения: 205
Зарегистрирован: Вс окт 17, 2010 23:10
Контактная информация:

Сообщение Strek »

Flasher писал(а):Важнее было бы на второй вопрос ответить.
Подумал про него, когда читал, да за своими делами не ответил :)

ПС. Ну вроде всё чётко, а по работе (по запуску программ) дальше проверим :)

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

Сообщение Flasher »

Strek
Гуд. Тогда пож-та. А сайт всегда есть возможность проверить (1, 2, 3 и т. д.). :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить