#NoEnv SetWorkingDir %A_ScriptDir% SetKeyDelay 50, 50 #SingleInstance Force #NoTrayIcon /* Скрипт предназначен для работы с пользовательскими командами JPEGView, синтаксис которых описан в JPEGView.ini. Отличие от простых команд (copy, move и пр.) в автоматическом создании целевых папок, автоматическом переименовании при совпадении имен, проверке результата и выдаче сообщений уже по завершении задачи. Поддерживаются абсолютные и относительные пути, возможно использование переменных текущего времени, даты, папки и расширения файла для получения конечного пути. Кроме того, возможно логирование производимых операций. Позволяет производить копирование, перемещение, переименование с появлением отдельного окна ввода, добавление суффиксов и префиксов, сохранение на месте (без суффикса "_proc") с сохранением оригинала в заданной папке. Скрипт позволяет использовать следующие переменные: $date - текущая дата в формате 2015-06-12 $time - текущее время в формате 15.27.06 $folder - имя папки исходного файла $file - имя файла без расширения $ext - его расширение Команды: 1. rename - переименование на месте с появлением отдельного окна ввода имени: UserCmd0="KeyCode: Shift+R Cmd: '"C:\Program Files\AutoHotkey\AutoHotkey.exe" %exepath%\JPEGView.ahk rename %filename%' Flags: 'WaitForTerminate ReloadFileList MoveToNext'" Здесь первые два члена команды - путь к исполняемому файлу Autohotkey и собственно скрипту, в данном случае находящемуся в папке программы. Можно скомпилировать скрипт и заменить эти два члена одним. JPEGView переходит к следующему файлу не дожидаясь окончания, но это не страшно, т.к исходное имя файла отображается в окне переименования. 2. Добавление суффиксов и префиксов - команды вида <... и ...> соответственно (возможно использование переменных). Добавление префикса "_" : UserCmd1="KeyCode: Shift+1 Cmd: '"C:\Program Files\AutoHotkey\AutoHotkey.exe" %exepath%\JPEGView.ahk <_ %filename%' Flags: 'WaitForTerminate ReloadFileList MoveToNext'" 3. move - перемещение. Удаление файла в мусорную папку: UserCmd2="KeyCode: Ctrl+Del Cmd: '"C:\Program Files\AutoHotkey\AutoHotkey.exe" %exepath%\JPEGView.ahk move %filename% D:\JPEGView\Trash\$folder' Flags: 'WaitForTerminate ReloadFileList MoveToNext'" 4. copy - копирование. Все то же, но MoveToNext не надо. Копирование в паку с датой и добавлением префикса из имени папки: UserCmd3="KeyCode: Shift+3 Cmd: '"C:\Program Files\AutoHotkey\AutoHotkey.exe" %exepath%\JPEGView.ahk copy %filename% D:\JPEGView\$date\$folder_$file.$ext' Flags: 'WaitForTerminate ReloadFileList'" 5. saveold - сохранение файла на месте, без суффикса "_proc", с сохранением оригинала в заданную папку: UserCmd4="KeyCode: Shift+S Cmd: '"C:\Program Files\AutoHotkey\AutoHotkey.exe" %exepath%\JPEGView.ahk saveold %filename% D:\JPEGView\Old\$folder'" P.S. Пользовательские команды требуют последовательной нумерации от 0 без пропусков! */ mess:=1 ; cообщать об успешных действиях (0 - только об ошибках) log:=2 ; логирование операций (2 - с разбивкой по дням) log_dir:="logs" ; папка сохранения логов SetTimer Exit, 60000, 1 Loop %0% par%A_Index%:=%A_Index% SplitPath par2, s_file, s_dir, s_ext, s_name FormatTime date, , yyyy-MM-dd FormatTime time, , HH.mm.ss folder:=RegExReplace(s_dir,".+\\") folder:=RegExReplace(folder,":") StringReplace par1, par1, % $date, % date StringReplace par1, par1, $time, % time StringReplace par1, par1, $folder, % folder StringReplace par1, par1, $file, % s_name StringReplace par1, par1, $ext, % s_ext StringReplace par3, par3, $date, % date StringReplace par3, par3, $time, % time StringReplace par3, par3, $folder, % folder StringReplace par3, par3, $file, % s_name StringReplace par3, par3, $ext, % s_ext WinGet id, ID, ahk_exe JPEGView.exe If (!par1 || !s_file) goto Error If (par1="rename") { mes:="Введите новое имя файла без расширения:" Input: InputBox name_new, % s_file, % mes, , 800, 130, , , , ,% s_name If Errorlevel || (name_new=s_name) return path_new:=s_dir "\" name_new "." s_ext If FileExist(path_new) mes:="Файл существует!", goto Input FileMove % par2,% path_new e:=Errorlevel, text:="Успешно переименовано!" } If RegExMatch(par1,"^<\K.+",pref) { path:=s_dir "\" pref . s_name "." s_ext FileMove % par2, % path e:=Errorlevel, text:="Добавлен префикс " pref } If RegExMatch(par1,".+(?=>)",suff) { path:=s_dir "\" s_name . suff "." s_ext FileMove % par2, % path e:=Errorlevel, text:="Добавлен суффикс " suff } If par1 in copy,move,saveold { If !path:=par3 goto Error If !RegExMatch(par3,"i)\.[a-z]{3,4}$") { t_dir:=RegExReplace(par3,":?\\$") path:=RenIfExist(t_dir "\" s_file,2) } else { SplitPath par3, , t_dir path:=RenIfExist(path,2) } FileCreateDir % t_dir If (par1="copy") { FileCopy, % par2,% path e:=Errorlevel, text:="Скопировано в `n" path } If (par1="move") { FileMove, % par2,% path e:=Errorlevel, text:="Перемещено в `n" path } If (par1="saveold") { Send ^{vk53} WinWaitNotActive % "ahk_id " id, , 3 If Errorlevel || !WinActive("ahk_exe JPEGView.exe") return WinGet id2, ID, A FileCopy % par2, % path If e:=Errorlevel goto End ControlSetText Edit1, % par2 ControlSend Edit1, {Enter} Sleep 300 If !(WinActive("ahk_id " id) || WinActive("ahk_id " id2)) Send {Left}{Enter} If !FileExist(par2) e2:=1 text:="Сохранено. Оригинал перемещен в `n" par3 } } End: Sleep 200 If e || e2 MsgBox, 16, Ошибка, Не выполнено! else If mess MsgBox, 64, Информация, % text, 1.5 If log { FileCreateDir % log_dir If (log=2) date:=A_YYYY "." A_MM "." A_DD "_" FileAppend % "`n`n### " A_DD "." A_MM "." A_YYYY " " A_Hour ":" A_Min " ###`nsource: " par2 "`naction: " par1 "`ntarget: " path "`nerrors: " e " " e2, % RegExReplace(log_dir,"\\$") "\" date "JPEGView.log" } Exit: ExitApp Error: MsgBox, 16, Ошибка, Неверно заданы параметры! ExitApp RenIfExist(f_path,tab="1") { If ! FileExist(f_path) return f_path SplitPath f_path, , dir, ext, file Loop % dir "\" file "*." ext { n:=0 RegExMatch(A_LoopFileName,"(?<=_)\d+?(?=\.\w{2,4}$)",n) If ! n n_max:=0 If (n>n_max) n_max:=n } SetFormat float, % "0" tab return dir "\" file "_" n_max+1.0 "." ext } |