Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Total Commander (Часть 8)

Модерирует : gyra, Maz

articlebot (20-03-2016 21:01): Обсуждение продолжается в части 9  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

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
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Total Commander (Часть 8)
articlebot (20-03-2016 21:01): Обсуждение продолжается в части 9


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru