Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Удалить часть имени в файлах с заменой
Goto page Previous  1, 2, 3, 4
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Чиполлино



Joined: 23 Dec 2017
Posts: 32
Location: Новочеркасск

Post (Separately) Posted: Sun Nov 10, 2019 22:52    Post subject: Reply with quote

Вопрос:
Как удалить из имен выделенных файлов имена, родительских каталогов, при условии, что эти имена точно присутствуют в именах выделенных файлов.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 9532
Location: Россия, Саратов

Post (Separately) Posted: Sun Nov 10, 2019 23:42    Post subject: Reply with quote

Чиполлино
Имена родительских каталогов могут быть в разных файлах какими угодно и располагаться где угодно. Как можно вычислить для произвольного файла, где там указан именно его родительский каталог, а не что-то другое? Для каждого файла выборки выяснять его собственный родительский каталог и искать тот же текст в имени? Не факт, что это возможно.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13954
Location: Москва

Post (Separately) Posted: Mon Nov 11, 2019 00:01    Post subject: Reply with quote

Avada wrote:
Не факт, что это возможно.
А что тут невозможного? Тут проблема в другом. После отрезания имена могут совпасть с уже имеющимися, в т. ч. уже обработанными.

Чиполлино
Как? Скриптом. И условие слишком очевидно, чтобы его указывать.
А вот про необходимость затрагивать расширения и действие при совпадении новых имён с имеющимися пояснить необходимо.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 8

Post (Separately) Posted: Mon Nov 11, 2019 04:59    Post subject: Reply with quote

Чиполлино wrote:
Как удалить из имен выделенных файлов имена, родительских каталогов, при условии, что эти имена точно присутствуют в именах выделенных файлов.

Это легко решается мощной утилитой Андрея Аверина TCIMG (это не реклама, а путь решения задачи).
Код кнопки после установки утилиты:
Code:
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
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13954
Location: Москва

Post (Separately) Posted: Mon Nov 11, 2019 14:58    Post subject: Reply with quote

Чиполлино
Короче, пока без расширений, но с регистронезависимостью, автопереименованием по счётчику при совпадении, работой в режимах без подкаталогов и найденных поиском файлов, поддержкой Юникода и длинных путей (260+):
Code:
'============================== 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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Чиполлино



Joined: 23 Dec 2017
Posts: 32
Location: Новочеркасск

Post (Separately) Posted: Mon Nov 11, 2019 23:32    Post subject: Reply with quote

Flasher wrote:
Короче, пока без расширений

Спасибо.

 !  Avada:
Последующая дописка удалена, комментарии в ЛС.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4
Page 4 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group