yozhic
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: #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 ==================================== ; ; ================================================= КИБНС ========================================= ; | COMRADES, у меня одного следующий кусок кода не отображается? Код: #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 ========================================================================| | | Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 15:56 11-10-2015 | Исправлено: yozhic, 16:07 11-10-2015 |
|