View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Nov 03, 2014 16:58 Post subject: |
|
|
Роман BY
Можно сохранить шаблон и открывать окно с преднастройками по MULTIRENAME <operation name>. См. справку или тут.
Без диалога - уже нужен будет сценарий. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) Posted: Mon Nov 03, 2014 20:42 Post subject: |
|
|
Часто требуется быстренько добавить префикс к именам группы файлов. Для того чтобы делать это быстрее чем встроенным групповым переименованием и не мусорить в его истории по-мелочам, а главное с именем файла под курсором в качестве шаблона. Выделяем нужное, опционально ставим курсор на файл, уже содержащий нужный текст, запускаем (к примеру, 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 |
|
|
Pashak
Joined: 12 Dec 2014 Posts: 1
|
(Separately) Posted: Fri Dec 12, 2014 17:15 Post subject: Групповое переименование |
|
|
Есть почти 40000 файлов, пример, Колобок БАБА 330.120 котился, нужно изменить - БАБА 330.120 Колобок котился. Возможно ли это? И (или) найти совпадения по цифрам. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 12, 2014 18:47 Post subject: |
|
|
Pashak
В справке ищем Подвыражения для поиска+замены.
Найти: (.*) (.*) (.*) (.*)
Заменить: $2 $3 $1 $4
[√] Рег. выраж. [√] Подстан. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Iori
Joined: 25 Apr 2012 Posts: 551
|
(Separately) Posted: Fri Feb 06, 2015 04:11 Post subject: |
|
|
Добрый День,
Нужно чтобы выбранные папки или файлы содержали точки между словами где пробелы.
Исключение: отсутствие точки после скобки ( и [, и перед ) и ].
То есть:
из
Quick Screen Capture v2 2 0
в
Quick.Screen.Capture.v2.2.0
из
терминатор 2 судный день (1991) .avi
в
терминатор.2.судный.день.(1991).avi
из
Можно этого добится через инструмент группового переименования, но по мне скрипт в виде кнопки куда удобние.
Трудно будет такой сделать? |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Feb 06, 2015 15:51 Post subject: |
|
|
Для параметра %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 |
|
|
Iori
Joined: 25 Apr 2012 Posts: 551
|
(Separately) Posted: Fri Feb 06, 2015 19:23 Post subject: |
|
|
Serge Yolkin
Спасибо.
Скрипт выдаёт ошибку.
Line 3
Char 2
Error: Synstax error
code: 800A03EA
Source Microsoft JScript compilation error. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Mon Feb 09, 2015 19:09 Post subject: |
|
|
Выдаёт.
Но не выдавал.
Попробую позже разобраться.
Last edited by Serge Yolkin on Mon Feb 09, 2015 19:36; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Feb 09, 2015 19:13 Post subject: |
|
|
Serge Yolkin
А как же исключения внутри скобок ([ * ]) ?
Для замены одного символа и регулярки не нужны... _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Mon Feb 09, 2015 19:37 Post subject: |
|
|
Flasher,
не, это я поторопился. Тут и парочка старых скриптов на ХР заглючили... |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Feb 09, 2015 23:09 Post subject: |
|
|
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 |
|
|
Iori
Joined: 25 Apr 2012 Posts: 551
|
(Separately) Posted: Tue Feb 10, 2015 01:00 Post subject: |
|
|
Flasher
Огромное Спасибо !!! Скрипт просто класс.
Я так понимаю что скрипт универсален, и его можно подогнать ко многим случаем.
А как вы указали пробел в Code: | ([^\(|^\[])(\s+)((?!\)|\])) |
А где можно почитать что это всё значит? А то у меня появилось несколько идей |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Feb 10, 2015 01:27 Post subject: |
|
|
Iori
Пожалуйста.
В общем-то, он универсален в рамках регекспов. Где о них почитать на форуме сообщалось многократно, в т.ч. и в этой теме. Да банально забить в гугле само понятие и посмотреть. Для составления полно сервисов: 1, 2, 3, 4 и т.д. Что касается работы с vbs/js, то самое неглядное пособие - это детище небезызвестного Шуры Асябрика (Tweak TС, TrashReg и т.д.). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2597
|
(Separately) Posted: Tue Feb 10, 2015 14:15 Post subject: |
|
|
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 |
|
|
|
|
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
|