Автор: yozhic
Дата сообщения: 11.10.2015 15:56
aidarsimon
Насколько я знаю, народ это скриптами делает. В TCIMG есть такой функционал (в числе других многочисленных). Я, например, себе сделал [more=такую поделку на AutoIt]
Код:
#comments-start ;===================================================================================;
Скрипт: Simple Rename
Версия скрипта: 1.3.2
Создан / Изменён: 08.07.2015 / 02.10.2015
Версия AutoIt: 3.3.8.1
Автор / Адрес: yozhic / forum.ru-board.com
Соглашение: Никаких гарантий и ответственности. Делайте со скриптом, что хотите.
Параметры запуска: ( %WL | %UL | %L ) — первый обязательный параметр. Список объектов
(файлов, папок). Передаётся из Total Commander.
/FR="ТекстДляПоиска//ТекстДляЗамены"
/FRE="ШаблонДляПоиска//ШаблонДляЗамены"
/PF="ПрефиксТекст"
/SF="СуффиксТекст"
/DATE($Y$M$D)
Пример: AutoIt.exe rens.au3 %UL /FRE="(-20\d{6})?$//" /SF="-/DATE($Y-$M-$D)
удалит дату (если есть) в конце имени и поставит текущую с дефисами.
Описание: Переименование объектов по списку. Порядок следования параметров — свободный
(кроме первого). Параметры обрабатываются в порядке очереди, т.е. если после
добавления текста выполнить замену, то она коснётся также и добавленного текста.
#comments-end ;=====================================================================================;
#Region >>> DIRECTIVES =============================================================================|
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 6 -w 7
#AutoIt3Wrapper_Run_Debug_Mode=N
#EndRegion >>> DIRECTIVES ==========================================================================|
#Region >>> INCLUDES ===============================================================================|
#include <File.au3>
#include <FileOperations.au3>
#EndRegion >>> INCLUDES ============================================================================|
#Region >>> OPTIONS ================================================================================|
#NoTrayIcon
#EndRegion >>> OPTIONS =============================================================================|
#Region >>> DECLARATIONS ===========================================================================|
Global Const $csTITLE = 'Simple Rename'
Global Const $csINI = @ScriptDir &'\'& StringTrimRight(@ScriptName,4) &'.ini'
Global Const $csApprovedExt = 'tmp'
Global $gaFileList, $gaSplittedSourceName, $gsSourceName, $gsResultName
;~ объявляем массив параметров переименования с количеством строк по количеству параметров
;~ КМС минус список объектов
If $CmdLine[0] > 0 Then
Global $gaRenParams[$CmdLine[0]][3]
Else
MsgBox(48+262144, $csTITLE, "The script is designed to be run with command-line parameters." & _
@LF&@LF& "Please, read the comments inside the script.")
Exit
EndIf
#EndRegion >>> DECLARATIONS ========================================================================|
#Region >>> MAIN PROCEDURE =========================================================================|
;~ Если ini не существует, создаём его
If Not FileExists($csINI) Then fn_IniCreate()
;~ Проверяем является ли первый параметр списком файлом
;~ Проверка осуществляется по расширению: числится ли в списке разрешённых расширений в ini
If StringRegExp(IniRead($csINI,'Main','ListExt','tmp'), '\b'& StringRight($CmdLine[1],3) &'\b') Then
Else
MsgBox(48+262144, $csTITLE, "It seems that the 1st parameter is not a file list." &@LF& _
"Check the ini-file for approved file list extensions." &@LF&@LF& _
'Approved extensions: ' & IniRead($csINI,'Main','ListExt','tmp') &@LF& _
'Current file list extension: ' & StringRight($CmdLine[1],3))
Exit
EndIf
;~ Считываем в массив список объектов для переименования
If Not _FileReadToArray($CmdLine[1], $gaFileList) Then
MsgBox(48+262144, $csTITLE, "Error of reading list to array." &@LF& "Error Code: " & @error)
Exit
EndIf
;~ Считываем в массив параметры переименования
$gaRenParams[0][0] = $CmdLine[0]-1
For $i = 2 To $CmdLine[0]
If StringRegExp($CmdLine[$i], "^/PF=") Then fn_AddPrefix(0, $i-1, $CmdLine[$i])
If StringRegExp($CmdLine[$i], "^/SF=") Then fn_AddSuffix(0, $i-1, $CmdLine[$i])
If StringRegExp($CmdLine[$i], "^/FR=") Then fn_FindReplace(0, $i-1, $CmdLine[$i])
If StringRegExp($CmdLine[$i], "^/FRE=") Then fn_FindReplaceRE(0, $i-1, $CmdLine[$i])
Next
;~ обрабатываем по очереди каждый объект
For $n = 1 To $gaFileList[0]
;~ если объект — папка, то удаляем слэш в конце имени
If StringRight($gaFileList[$n],1) = '\' Then $gaFileList[$n] = StringTrimRight($gaFileList[$n],1)
$gsSourceName = $gaFileList[$n]
;~ разбиваем полный путь на путь, имя, расширение
$gaSplittedSourceName = _FO_PathSplit($gaFileList[$n])
$gsResultName = $gaSplittedSourceName[1]
;~ каждое имя обрабатываем данными из массива параметров переименования
For $i = 1 To $gaRenParams[0][0]
If $gaRenParams[$i][0] = "PF" Then fn_AddPrefix(1, $i)
If $gaRenParams[$i][0] = "SF" Then fn_AddSuffix(1, $i)
If $gaRenParams[$i][0] = "FR" Then fn_FindReplace(1, $i)
If $gaRenParams[$i][0] = "FRE" Then fn_FindReplaceRE(1, $i)
Next
;~ добавляем к новому имени расширение и переименовываем
$gsResultName = $gsResultName & $gaSplittedSourceName[2]
_FO_FileDirReName($gsSourceName, $gsResultName)
Next
#EndRegion >>> MAIN PROCEDURE ======================================================================|
#Region >>> FUNCTIONS ==============================================================================|
Func fn_InsertDate($s)
Local $a, $sr
While StringRegExp($s, "(?<!\\)/DATE")
$a = StringRegExp($s, "(?<!\\)/DATE\(.+?\)", 1)
$sr = StringRegExpReplace($a[0], "(/DATE\(|\))", "")
$sr = StringReplace($sr, "$Y", @YEAR, 0, 1)
$sr = StringReplace($sr, "$M", @MON, 0, 1)
$sr = StringReplace($sr, "$D", @MDAY, 0, 1)
$s = StringReplace($s, $a[0], $sr, 0, 1)
WEnd
Return $s
EndFunc ; ### fn_InsertDate ### ------------------------------------------------------------------- ;
Func fn_FindReplace($flag, $i, $s = 0)
;~ $flag - переключает работу функции для наполнения массива (0) или обработки строк (1)
;~ $i - передаёт номер строки массива
;~ $s - передаёт строку для обработки, необходим только при $flag = 0
If $flag = 0 Then
Local $a
$s = fn_InsertDate($s)
$gaRenParams[$i][0] = "FR"
$a = StringRegExp($s, "(?<!\\)(?<=/FR=).+?(?<!\\)(?=//)", 1)
$gaRenParams[$i][1] = $a[0]
$a = StringRegExp($s, "(?<=//).*$", 1)
$gaRenParams[$i][2] = $a[0]
Else
$gsResultName = StringReplace($gsResultName, $gaRenParams[$i][1], $gaRenParams[$i][2])
EndIf
EndFunc ; ### fn_FindReplace ### ------------------------------------------------------------------ ;
Func fn_FindReplaceRE($flag, $i, $s = 0)
;~ объяснение параметров см. в fn_FindReplace()
If $flag = 0 Then
Local $a
$s = fn_InsertDate($s)
$gaRenParams[$i][0] = "FRE"
$a = StringRegExp($s, "(?<!\\)(?<=/FRE=).+?(?<!\\)(?=//)", 1)
$gaRenParams[$i][1] = $a[0]
$a = StringRegExp($s, "(?<=//).*$", 1)
$gaRenParams[$i][2] = $a[0]
Else
$gsResultName = StringRegExpReplace($gsResultName, $gaRenParams[$i][1], $gaRenParams[$i][2])
EndIf
EndFunc ; ### fn_FindReplaceRE ### ---------------------------------------------------------------- ;
Func fn_AddSuffix($flag, $i, $s = 0)
;~ объяснение параметров см. в fn_FindReplace()
If $flag = 0 Then
Local $a
$s = fn_InsertDate($s)
$gaRenParams[$i][0] = "SF"
$a = StringRegExp($s, "(?<!\\)(?<=/SF=).+$", 1)
$gaRenParams[$i][1] = $a[0]
Else
$gsResultName = $gsResultName & $gaRenParams[$i][1]
EndIf
EndFunc ; ### fn_AddSuffix ### -------------------------------------------------------------------- ;
Func fn_AddPrefix($flag, $i, $s = 0)
;~ объяснение параметров см. в fn_FindReplace()
If $flag = 0 Then
Local $a
$s = fn_InsertDate($s)
$gaRenParams[$i][0] = "PF"
$a = StringRegExp($s, "(?<!\\)(?<=/PF=).+$", 1)
$gaRenParams[$i][1] = $a[0]
Else
$gsResultName = $gaRenParams[$i][1] & $gsResultName
EndIf
EndFunc ; ### fn_AddPrefix ### -------------------------------------------------------------------- ;
Func fn_IniCreate()
Local $h
$h = FileOpen($csINI, 33)
FileWriteLine($h, '[Main]')
FileWriteLine($h, 'ListExt=' & $csApprovedExt)
FileClose($h)
EndFunc ; ### fn_IniCreate ### -------------------------------------------------------------------- ;
#EndRegion >>> FUNCTIONS ===========================================================================|
; ============================================ Made in AkelPad ==================================== ;
; ================================================= КИБНС ========================================= ;