Страница 4 из 4

Добавлено: Вс ноя 10, 2019 21:52
Чиполлино
Вопрос:
Как удалить из имен выделенных файлов имена, родительских каталогов, при условии, что эти имена точно присутствуют в именах выделенных файлов.

Добавлено: Вс ноя 10, 2019 22:42
Avada
Чиполлино
Имена родительских каталогов могут быть в разных файлах какими угодно и располагаться где угодно. Как можно вычислить для произвольного файла, где там указан именно его родительский каталог, а не что-то другое? Для каждого файла выборки выяснять его собственный родительский каталог и искать тот же текст в имени? Не факт, что это возможно.

Добавлено: Вс ноя 10, 2019 23:01
Flasher
Avada писал(а):Не факт, что это возможно.
А что тут невозможного? Изображение Тут проблема в другом. После отрезания имена могут совпасть с уже имеющимися, в т. ч. уже обработанными.

Чиполлино
Как? Скриптом. И условие слишком очевидно, чтобы его указывать.
А вот про необходимость затрагивать расширения и действие при совпадении новых имён с имеющимися пояснить необходимо.

Добавлено: Пн ноя 11, 2019 03:59
Monarch-LFV
Чиполлино писал(а):Как удалить из имен выделенных файлов имена, родительских каталогов, при условии, что эти имена точно присутствуют в именах выделенных файлов.
Это легко решается мощной утилитой Андрея Аверина TCIMG (это не реклама, а путь решения задачи).
Код кнопки после установки утилиты:

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

TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\Plugins\exe\TCIMG\TCIMG.exe"
renms=%L||<info=o91"%Px"//>!!
%COMMANDER_PATH%\Plugins\exe\TCIMG\TCIMG.dll,1
Удалить в имени выделенных файлов имя родительского каталога
%COMMANDER_PATH%\Plugins\exe\TCIMG\

-1

Добавлено: Пн ноя 11, 2019 13:58
Flasher
Чиполлино
Короче, пока без расширений, но с регистронезависимостью, автопереименованием по счётчику при совпадении, работой в режимах без подкаталогов и найденных поиском файлов, поддержкой Юникода и длинных путей (260+):

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

'============================== VBS ==============================
' Убрать из базовых имён выбранных файлов имена родительских папок
' Параметр: %WL
'=================================================================
Option Explicit : Dim FSO, List, F, Ext, PF, PN, BN, FN, c
If WSH.Arguments.Count = 0 Then WSH.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set List = FSO.OpenTextFile(WSH.Arguments(0),,,-1)
Do: F = List.ReadLine
  If Right(F, 1) <> "\" Then
    Ext = FSO.GetExtensionName(F)
    If Len(Ext) Then Ext = "." & Ext
    PF = "\\?\" & FSO.GetParentFolderName(F) & "\"
    PN = FSO.GetFileName(PF) : BN = FSO.GetBaseName(F)
    If InStr(1, BN, PN, 1) > 0 And Len(PN) > 0 Then
      BN = Replace(BN, PN, "", 1, -1, 1)
      If Len(BN) Then
        FN = BN & Ext : c = 0
        While (FSO.FileExists(PF & FN) OR FSO.FolderExists(PF & FN))
          c = c + 1 : FN = BN & " (" & c & ")" & Ext
        Wend
        If Len(F) > 259 Or Len(PF & FN) > 259 Then F = "\\?\" & F
        FSO.GetFile(F).Name = FN
      End If
    End If
  End If
Loop Until List.AtEndOfStream : List.Close
Set List = Nothing : Set FSO = Nothing

Добавлено: Пн ноя 11, 2019 22:52
Чиполлино
Flasher писал(а):Короче, пока без расширений
Спасибо.

[mod="Avada"]Последующая дописка удалена, комментарии в ЛС.[/mod]