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 ... 21, 22, 23 ... 49, 50, 51  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



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

Post (Separately) Posted: Mon Nov 03, 2014 16:58    Post subject: Reply with quote

Роман BY
Можно сохранить шаблон и открывать окно с преднастройками по MULTIRENAME <operation name>. См. справку или тут.
Без диалога - уже нужен будет сценарий.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Mon Nov 03, 2014 20:42    Post subject: Reply with quote

Часто требуется быстренько добавить префикс к именам группы файлов. Для того чтобы делать это быстрее чем встроенным групповым переименованием и не мусорить в его истории по-мелочам, а главное с именем файла под курсором в качестве шаблона. Выделяем нужное, опционально ставим курсор на файл, уже содержащий нужный текст, запускаем (к примеру, Ctrl+Shift+M), правим текст/вводим новый.
Можно добавлять как префикс так и суффикс, вместе и по отдельности — разделитель ‹:›

affix-rename.vbs:
Code:

'===============================================================
' Affix rename (by helb)
' Add prefix and/or suffix to each file/dir in a list (UTF-16 encoded):
' ‘:’ — prefix-suffix separator (e.g. “:suffix” or “prefix:suffix”)
' Добавляет префикс и/или суффикс к каждому файлу/папке в списке
' ‘:’ — разделитель префикса и суффикса
'
' Parameters: <listfile (UTF-16)> [<suggestion>]
' Total Commander parameters: %WL "%O"
'===============================================================
Option Explicit
dim FSO, F, fobj, name, prefix, suffix, list, confirmed
set FSO = CreateObject("Scripting.FileSystemObject")

if WScript.Arguments.length = 0 then
   WScript.Echo("No parameters specified")
   WScript.Quit
end if
if FSO.FileExists(WScript.Arguments(0)) then
   List = WScript.Arguments(0)
else
   WScript.Echo("No list")
   WScript.Quit
end if

if WScript.Arguments(1) <> "" then name = WScript.Arguments(1)
name = InputBox("Enter affix (use ‘:’ to denote suffix)", "Rename", name)
if name = "" then WScript.Quit

name = Split(name, ":")
prefix = name(0)
if Ubound(name) < 1 then suffix = "" else suffix = name(1)

for each F in Split(FSO.OpenTextFile(List, 1, false, -1).ReadAll, vbNewLine)
   if F <> "" then
      set fobj = getObj(F)
      if not fobj is nothing then
         name = fobj.ParentFolder.Path & "\" & prefix & FSO.GetBaseName(F) & suffix & "." & FSO.GetExtensionName(F)
         if objExists(name) > 0 and confirmed = Empty then
            confirmed = MsgBox("Name conflict. Overwrite all? (“No” to skip all)" & vbCrLf & "Note: overwriting folders will delete contents", vbExclamation + vbYesNoCancel, "Confirm")
            if confirmed = vbCancel then exit for
         end if
         if objExists(name) > 0 and confirmed = vbYes or objExists(name) = 0 then
            if objExists(name) > 0 then getObj(name).Delete
            fobj.Move(name)
         end if
      end if
   end if
next

WScript.Quit

function getObj(fl)
   if FSO.FileExists(fl) then
      set getObj = FSO.GetFile(fl)
   elseif FSO.FolderExists(fl) then
      set getObj = FSO.GetFolder(fl)
   else
      set getObj = nothing
   end if
end function

'0=not exists, 1=is file, 2=is folder
function objExists(name)
   if FSO.FileExists(name) then
      objExists = 1
   elseif FSO.FolderExists(name) then
      objExists = 2
   else
      objExists = 0
   end if
end function

function getNewName(name)
   if Right(name, Len(ext)) = ext then getNewName = Left(name, Len(name) - Len(ext)) else getNewName = name & ext
end function
Back to top
View user's profile Send private message
Pashak



Joined: 12 Dec 2014
Posts: 1

Post (Separately) Posted: Fri Dec 12, 2014 17:15    Post subject: Групповое переименование Reply with quote

Есть почти 40000 файлов, пример, Колобок БАБА 330.120 котился, нужно изменить - БАБА 330.120 Колобок котился. Возможно ли это? И (или) найти совпадения по цифрам.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Dec 12, 2014 18:47    Post subject: Reply with quote

Pashak
В справке ищем Подвыражения для поиска+замены.
Найти: (.*) (.*) (.*) (.*)
Заменить: $2 $3 $1 $4
[√] Рег. выраж. [√] Подстан.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Iori



Joined: 25 Apr 2012
Posts: 551

Post (Separately) Posted: Fri Feb 06, 2015 04:11    Post subject: Reply with quote

Добрый День,

Нужно чтобы выбранные папки или файлы содержали точки между словами где пробелы.
Исключение: отсутствие точки после скобки ( и [, и перед ) и ].

То есть:
из
Quick Screen Capture v2 2 0
в
Quick.Screen.Capture.v2.2.0
из
терминатор 2 судный день (1991) .avi
в
терминатор.2.судный.день.(1991).avi
из


Можно этого добится через инструмент группового переименования, но по мне скрипт в виде кнопки куда удобние.

Трудно будет такой сделать?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Fri Feb 06, 2015 15:51    Post subject: Reply with quote

Для параметра %S:
Code:
<job>
  <object id="f" progid="Scripting.FileSystemObject" />
  <script type="text/jscript" language="JScript"><![CDATA[
    var a=WScript.Arguments,b,c='';
    for(var i=0;i<a.length;i++){
      if(f.fileExists(a(i)))b=f.getFile(a(i));
      else if(f.folderExists(a(i)))b=f.getFolder(a(i));
      b.name=a(i).replace(/\s+/g,'.');
    }
  ]]></script>
</job>
(формат .wsf)
Back to top
View user's profile Send private message
Iori



Joined: 25 Apr 2012
Posts: 551

Post (Separately) Posted: Fri Feb 06, 2015 19:23    Post subject: Reply with quote

Serge Yolkin

Спасибо.

Скрипт выдаёт ошибку.

Line 3
Char 2
Error: Synstax error
code: 800A03EA
Source Microsoft JScript compilation error.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Mon Feb 09, 2015 19:09    Post subject: Reply with quote

Выдаёт.
Но не выдавал.
Попробую позже разобраться.


Last edited by Serge Yolkin on Mon Feb 09, 2015 19:36; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Feb 09, 2015 19:13    Post subject: Reply with quote

Serge Yolkin
А как же исключения внутри скобок ([ * ]) ?
Для замены одного символа и регулярки не нужны...
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Mon Feb 09, 2015 19:37    Post subject: Reply with quote

Flasher,
не, это я поторопился. Тут и парочка старых скриптов на ХР заглючили...
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Mon Feb 09, 2015 23:09    Post subject: Reply with quote

Serge Yolkin
Ладно, я чего-то подустал ждать.

Iori
Code:
'============================== VBS =============================
' Переименовать выбранные элементы с помощью регулярных выражений

' Параметры: %WL <строка поиска> <строка замены>
' /i  —  ключ отключения зависимости от регистра
'================================================================
Option Explicit
Dim C, List, S, R, REx, F, N, IsFold, Ln, BN, Ext, Path, FN, i
With WSH.Arguments
  C = .UnNamed.Count : If C = 0 Then WSH.Quit
  If C <> 3 Then MsgBox "Следует указать 3 параметра!",_
  4144, Space(12) & "Ошибка вводных данных" : WSH.Quit
  List = .Item(0) : S = .Item(1) : R = .Item(2)
  C = .Named.Exists("i")
End With: Set REx = New RegExp: REx.Global = 1
REx.Pattern = S : If C Then REx.IgnoreCase = 1

With CreateObject("Scripting.FileSystemObject")
  Set List = .OpenTextFile(List,,,-1)
  Do : F = List.ReadLine : N = .GetFileName(F) : IsFold = Right(F, 1) = "\"
    If IsFold Then Ln = Len(F) - 1 : BN = N Else Ln = Len(F) :_
    BN = .GetBaseName(F) : Ext = .GetExtensionName(F) :_
    If Len(Ext) Then Ext = "." & Ext
    Path = "\\?\" & .GetParentFolderName(F) & "\"
    If Ln > 259 Then F = "\\?\" & F
    BN = REx.Replace(BN, R) : FN = BN & Ext : i = 0
    While (.FileExists(Path & FN) OR .FolderExists(Path & FN)) And FN <> N
    i = i + 1 : FN = BN & " (" & i & ")" & Ext : Wend : If FN <> N Then _
    If IsFold Then .GetFolder(F).Name = FN Else .GetFile(F).Name = FN
  Loop Until List.AtEndOfStream
End With : CreateObject("WScript.Shell").SendKeys "^r"
Параметры для запрошенного случая: %WL ([^\(|^\[])(\s+)((?!\)|\])) $1.$3
Строка поиска ещё может быть такой: ([^\(|^\[])(\s+)([^\)|^\]])
По числу символов одинаково, так что - без разницы.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Tue Feb 17, 2015 19:43; edited 2 times in total
Back to top
View user's profile Send private message
Iori



Joined: 25 Apr 2012
Posts: 551

Post (Separately) Posted: Tue Feb 10, 2015 01:00    Post subject: Reply with quote

Flasher

Огромное Спасибо !!! Скрипт просто класс.

Я так понимаю что скрипт универсален, и его можно подогнать ко многим случаем.

А как вы указали пробел в
Code:
([^\(|^\[])(\s+)((?!\)|\]))

А где можно почитать что это всё значит? А то у меня появилось несколько идей Smile
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Feb 10, 2015 01:27    Post subject: Reply with quote

Iori
Пожалуйста. Wink
В общем-то, он универсален в рамках регекспов. Где о них почитать на форуме сообщалось многократно, в т.ч. и в этой теме. Да банально забить в гугле само понятие и посмотреть. Для составления полно сервисов: 1, 2, 3, 4 и т.д. Что касается работы с vbs/js, то самое неглядное пособие - это детище небезызвестного Шуры Асябрика (Tweak TС, TrashReg и т.д.).
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Tue Feb 10, 2015 01:28    Post subject: Reply with quote

Quote:
А как вы указали пробел
\s
Quote:
А где можно почитать что это всё значит?
Как обычно
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2597

Post (Separately) Posted: Tue Feb 10, 2015 14:15    Post subject: Reply with quote

Iori wrote:
в виде кнопки куда удобнее.

Можно создать в тотале именованный шаблон группового переименования (в данном примере он назван "Точки между словами, где пробелы") и применять его (для выбранных элементов) с помощью кнопки на TCFS2:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_temp, cmd,
`MULTIRENAME Точки между словами, где пробелы`) tem(em_temp) delay(500) send(`{ENTER}`, findwnd(`TMultiRename`)) delay(500) send(`{ESC}`, findwnd(`TMultiRename`))"
WCMICONS.DLL,46
Мультипереименовать по шаблону "Точки между словами, где пробелы"


-1
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 ... 21, 22, 23 ... 49, 50, 51  Next
Page 22 of 51

 
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