Вопрос:
Как удалить из имен выделенных файлов имена, родительских каталогов, при условии, что эти имена точно присутствуют в именах выделенных файлов.
Удалить часть имени в файлах с заменой
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Чиполлино
Имена родительских каталогов могут быть в разных файлах какими угодно и располагаться где угодно. Как можно вычислить для произвольного файла, где там указан именно его родительский каталог, а не что-то другое? Для каждого файла выборки выяснять его собственный родительский каталог и искать тот же текст в имени? Не факт, что это возможно.
Имена родительских каталогов могут быть в разных файлах какими угодно и располагаться где угодно. Как можно вычислить для произвольного файла, где там указан именно его родительский каталог, а не что-то другое? Для каждого файла выборки выяснять его собственный родительский каталог и искать тот же текст в имени? Не факт, что это возможно.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
А что тут невозможного?Avada писал(а):Не факт, что это возможно.
Тут проблема в другом. После отрезания имена могут совпасть с уже имеющимися, в т. ч. уже обработанными.Чиполлино
Как? Скриптом. И условие слишком очевидно, чтобы его указывать.
А вот про необходимость затрагивать расширения и действие при совпадении новых имён с имеющимися пояснить необходимо.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
- Monarch-LFV
- Сообщения: 360
- Зарегистрирован: Пн июл 22, 2019 13:20
Это легко решается мощной утилитой Андрея Аверина 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Чиполлино
Короче, пока без расширений, но с регистронезависимостью, автопереименованием по счётчику при совпадении, работой в режимах без подкаталогов и найденных поиском файлов, поддержкой Юникода и длинных путей (260+):
Короче, пока без расширений, но с регистронезависимостью, автопереименованием по счётчику при совпадении, работой в режимах без подкаталогов и найденных поиском файлов, поддержкой Юникода и длинных путей (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Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.