View previous topic :: View next topic |
Author |
Message |
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Tue Sep 16, 2014 20:02 Post subject: |
|
|
Skif_off wrote: | а путь к файлам как передать? |
не предусмотрено.
обрабатывается текущая папка (и глубже, если указан /S) |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Tue Sep 16, 2014 22:06 Post subject: |
|
|
Положил в нужную папку и запустил батник без всяких кнопок - всё нормально отработало. Значит, работало без кнопки |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Tue Sep 16, 2014 22:14 Post subject: |
|
|
Code: | TOTALCMD#BAR#DATA
%commander_path%\Toolz\jpgtest.cmd
/s
shell32.dll,117
Тест JPEG-файлов в этой папке
-1
|
заходишь в нужную папку, нажимаешь кнопку |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Sep 16, 2014 22:57 Post subject: |
|
|
Tol!k wrote: | надёжнее – в папку, прописанную в %path% | Надёжно, но непортабельно. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Wed Sep 17, 2014 01:10 Post subject: |
|
|
Tol!k
Нифига, сыпется в лог
Code: | Not a JPEG file:
Corrupt JPEG data:
Premature end of
Empty input file
Invalid JPEG file structure:
JPEG datastream contains no image |
и всё. Файл %tmp%\jpgtest.tmp не удаляется скриптом.
jpgerror.lst должен создаваться рядом с jpegtran.exe?
Tol!k wrote: | надёжнее – в папку, прописанную в %path% |
Попробовал ради любопытства добавить
Code: | set PATH=%PATH%;%COMMANDER_PATH%\UTILITIES\JPEGTest\ |
jpgerror.lst создается в корневой папке с картинками, что не есть гуд: писать там, где проверяешь - дурной тон.
З.Ы. Наверное, запилю на AutoIt |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Thu Sep 18, 2014 16:22 Post subject: |
|
|
Набросал, в общем, как-то так
Code: | #NoTrayIcon
#include <FileOperations.au3>
;Автор идеи Tol!k, батник: http://forum.wincmd.ru/viewtopic.php?p=56916#56916
#Region ;Обрабатываем командную строку, если пустая - появится окно выбора каталога
If $CmdLine[0] = 0 Then
$sPathWithPic = FileSelectFolder('Укажите каталог с изображениями', '' , 4)
Switch MsgBox(3 + 4096, 'JPGtest.au3', 'Проверить изображения только в этом каталоге? ' & _
'Иначе - рекурсивно. Кнопка Отмена завершит работу скрипта.')
Case 6
$iD = 0
Case 7
$iD = 125
Case 2
Exit
EndSwitch
ElseIf $CmdLine[0] = '1' Then
$sPathWithPic = $CmdLine[1]
$iD = 0
ElseIf $CmdLine[2] = 'recurs' Then
$sPathWithPic = $CmdLine[1]
$iD = 125
EndIf
#EndRegion
;Получаем массив со всеми файлами (или не получаем :))
$aFileList = _FO_FileSearch($sPathWithPic, 'jpg|jpeg|jpe', True, $iD, 1, 1, 2, 0)
If @error Then
Switch @error
Case 1
MsgBox(4096, 'JPGtest.au3', 'Неверный путь!')
Exit
Case 2
MsgBox(4096, 'JPGtest.au3', 'Неверная маска!')
Exit
Case 3
MsgBox(4096, 'JPGtest.au3', 'Ничего не найдено!')
Exit
EndSwitch
EndIf
#Region ;Процесс пошел
;Удаляем старый лог и testtmp.jpg, если есть
If FileExists(@TempDir & '\jpgerror.txt') Then
FileSetAttrib(@TempDir & '\jpgerror.txt', '-RASHNOT')
FileDelete(@TempDir & '\jpgerror.txt')
EndIf
If FileExists(@TempDir & '\testtmp.jpg') Then
FileSetAttrib(@TempDir & '\testtmp.jpg', '-RASHNOT')
FileDelete(@TempDir & '\testtmp.jpg')
EndIf
;Создаем в %Temp% лог для поврежденных файлов в кодировке UTF8 with BOM
$hFile = FileOpen(@TempDir & '\jpgerror.txt', 1 + 128)
;Проверяем
If $hFile = -1 Then
MsgBox(4096, 'Ошибка', 'Невозможно открыть файл.')
Exit
EndIf
;Счетчик ошибок
$CounterError = '0'
;GUICreate("JPGtest.au3", 250, 100)
;$iStatusBar = GUICtrlCreateLabel('', 5, 10, 240, 90, 0x0000)
;GUICtrlSetColor(-1, 0xff0000)
;GUISetState()
For $i = 1 To $aFileList[0]
; GUICtrlSetData($iStatusBar, $aFileList[$i])
$sOut = ''
$iPID = Run(@ScriptDir & '\jpegtran.exe -optimize "' & $aFileList[$i] & '" "' & @TempDir & '\testtmp.jpg"', '', @SW_HIDE, 4)
While 1
$sOut &= StderrRead($iPID)
If @error Then ExitLoop
WEnd
If $sOut Then
$sError = StringRegExpReplace($sOut, "[\r\n]+", " ")
FileWriteLine($hFile, $aFileList[$i] & @TAB & $sError)
$CounterError += 1
EndIf
Next
FileClose($hFile)
;GUIDelete()
#EndRegion
;Дополнение для результата
If $iD = 0 Then
$recurs = ' (исключая подкаталоги) '
ElseIf $iD = 125 Then
$recurs = ' (включая подкаталоги) '
EndIf
;Результат
If $CounterError = '' Then
MsgBox(4096, 'JPGtest.au3', 'Скрипт завершил работу, поврежденные файлы в ' & _
'каталоге "' & $sPathWithPic & '"' & $recurs & 'не найдены.')
Else
Switch MsgBox(4 + 4096, 'JPGtest.au3', 'Скрипт завершил работу, в каталоге "' & _
$sPathWithPic & '"' & $recurs & 'найдены поврежденные файлы: ' & $CounterError & '. Открыть список?')
Case 6
ShellExecute(@TempDir & '\jpgerror.txt')
Case 7
Exit
EndSwitch
EndIf |
Из комментов вроде все понятно. Ключи: jpgtest.au3 %P%N - запуск в каталоге, jpgtest.au3 %P%N recurs - включая подкаталоги. Если раскомментировать строки 63-66, 69, 84, то при работе появится небольшое окно в котором будет имя и путь текущего файла.
Наверное, можно заменить _FO_FileSearch() на dir - подсократить скрипт.
Добавлено:
Какая-то фигня: на тестовом наборе из сохраненных из интернета пикч (фактически - неоднократно пережатые) рандомно зависает на некоторых файлах, если в Process Hacker скопировать зависшую командную строку и запустить в консоли - всё нормально.
Батник (скопировал в корневой каталог) отрабатывает номалньно.
Last edited by Skif_off on Fri Sep 26, 2014 12:19; edited 1 time in total |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Fri Sep 19, 2014 20:46 Post subject: |
|
|
По скрипту: проверил в WinPE (на базе XP SP2/XP SP3/7 и 8.1 x86|x64), версии AutoIt 3.3.8.1 и 3.3.12.0 - отлично отрабатывает. На нормальной WinXP SP3 - тоже, а вот на Win7x64 - нет.
Непонятно.
Добавлено:
Это нечто: в виртуалке чистая Win7x64+все обновления - работает. |
|
Back to top |
|
|
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Thu Sep 25, 2014 15:58 Post subject: |
|
|
Skif_off
Спасибо за скрипт!
Skif_off wrote: | Ключи: jpgtest.au3 "%P" - запуск в каталоге, jpgtest.au3 "%P" recurs - включая подкаталоги. |
Если в параметры кнопки прописать %P recurs или %P и выделить папку с jpeg, то у меня открывается окно с обзором папок.
Skif_off wrote: | Если раскомментировать строки 63-66, 69, 84, то при работе появится небольшое окно в котором будет имя и путь текущего файла. |
Если путь длинный, то виден только путь, а не файлы. Хорошо бы если строка переносилась по словам или показывался прогрес в процентах. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Fri Sep 26, 2014 00:48 Post subject: |
|
|
SVM wrote: | Если в параметры кнопки прописать %P recurs или %P |
Ну, это, конечно, мой недосмотр: %P%N и %P%N recurs для папки под курсором - пока отлаживаю, запускаю без параметров, надо ещё подумать - мне нравится, как запускается батник Tol!k в текущем каталоге.
О прогрессе не может быть речи Причин две, выберите какая нравится: у меня плохо получается и не хочется усложнять скрипт (всё это занимает время, скрипт должен быть максимально быстрым). По второй же причине не стал резать путь для наглядности. Вообще, GUI добавил сначала для отладки, окончательно не решил, как с ним быть, была мысль добавить значок в трей для наглядности (jpegtran.exe работает шустро, конечно, но совсем без индикации работы нехорошо как-то).
Увеличил размер окна и добавил вывод в виде *error/current/all (количество ошибок/номер текущего файла/всего файлов).
Hidden text
Code: | #NoTrayIcon
#include <FileOperations.au3>
;Автор идеи Tol!k, батник: http://forum.wincmd.ru/viewtopic.php?p=56916#56916
;Обозвал локальными, т.к. скомпилированная версия иногда ругается
Local $sPathWithPic, $iD, $aFileList, $hFile, $recurs
#Region ;Обрабатываем командную строку, если пустая - появится окно выбора каталога
If $CmdLine[0] = 0 Then
$sPathWithPic = FileSelectFolder('Укажите каталог с изображениями', '' , 4)
If @error = 1 Then Exit
Switch MsgBox(3 + 4096, 'JPGtest.au3', 'Проверить изображения только в этом каталоге? ' & _
'Иначе - рекурсивно. Кнопка Отмена завершит работу скрипта.')
Case 6
$iD = 0
Case 7
$iD = 125
Case 2
Exit
EndSwitch
ElseIf $CmdLine[0] = '1' Then
$sPathWithPic = $CmdLine[1]
$iD = 0
ElseIf $CmdLine[0] = '2' And $CmdLine[2] = 'recurs' Then
$sPathWithPic = $CmdLine[1]
$iD = 125
EndIf
#EndRegion
;Получаем массив со всеми файлами (или не получаем :))
$aFileList = _FO_FileSearch($sPathWithPic, 'jpg|jpeg|jpe', True, $iD, 1, 1, 2, 0)
If @error Then
Switch @error
Case 1
MsgBox(4096, 'JPGtest.au3', 'Неверный путь!')
Exit
Case 2
MsgBox(4096, 'JPGtest.au3', 'Неверная маска!')
Exit
Case 3
MsgBox(4096, 'JPGtest.au3', 'Ничего не найдено!')
Exit
EndSwitch
EndIf
#Region ;Процесс пошел
;Удаляем старый лог и testtmp.jpg, если есть
If FileExists(@TempDir & '\jpgerror.txt') Then
FileSetAttrib(@TempDir & '\jpgerror.txt', '-RASHNOT')
FileDelete(@TempDir & '\jpgerror.txt')
EndIf
If FileExists(@TempDir & '\testtmp.jpg') Then
FileSetAttrib(@TempDir & '\testtmp.jpg', '-RASHNOT')
FileDelete(@TempDir & '\testtmp.jpg')
EndIf
;Создаем в %Temp% лог для поврежденных файлов в кодировке UTF8 with BOM
$hFile = FileOpen(@TempDir & '\jpgerror.txt', 1 + 128)
;Проверяем
If $hFile = -1 Then
MsgBox(4096, 'Ошибка', 'Невозможно открыть файл.')
Exit
EndIf
;Счетчик ошибок
$CounterError = '0'
;GUI
GUICreate("JPGtest.au3", 350, 150)
$FullFileName = GUICtrlCreateLabel('', 5, 5, 340, 120, 0x0000)
$StatusBar = GUICtrlCreateLabel('', 5, 128, 340, 17, 0x0000)
GUICtrlSetColor(-1, 0xff0000)
GUISetState()
For $i = 1 To $aFileList[0]
GUICtrlSetData($FullFileName, $aFileList[$i])
GUICtrlSetData($StatusBar, '*error/current/all: *' & $CounterError & '/' & $i & '/' & $aFileList[0])
$sOut = ''
$iPID = Run(@ScriptDir & '\jpegtran.exe -optimize "' & $aFileList[$i] & '" "' & @TempDir & '\testtmp.jpg"', '', @SW_HIDE, 4)
While 1
$sOut &= StderrRead($iPID)
If @error Then ExitLoop
WEnd
If $sOut Then
$sError = StringRegExpReplace($sOut, "[\r\n]+", " ")
FileWriteLine($hFile, $aFileList[$i] & @TAB & $sError)
$CounterError += 1
EndIf
Next
FileClose($hFile)
GUIDelete()
#EndRegion
;Дополнение для результата
If $iD = 0 Then
$recurs = ' (исключая подкаталоги) '
ElseIf $iD = 125 Then
$recurs = ' (включая подкаталоги) '
EndIf
;Результат
If $CounterError = '0' Then
MsgBox(4096, 'JPGtest.au3', 'Скрипт завершил работу, поврежденные файлы в ' & _
'каталоге "' & $sPathWithPic & '"' & $recurs & 'не найдены.')
Else
Switch MsgBox(4 + 4096, 'JPGtest.au3', 'Скрипт завершил работу, в каталоге "' & _
$sPathWithPic & '"' & $recurs & 'найдены поврежденные файлы: ' & $CounterError & '. Открыть список?')
Case 6
ShellExecute(@TempDir & '\jpgerror.txt')
Case 7
Exit
EndSwitch
EndIf |
Не знаю, что будет в итоге - скрипт работает нормально везде, кроме моей системы Отвлекся немного с MAFF, чуть позже буду пробовать ещё.
Last edited by Skif_off on Fri Sep 26, 2014 14:41; edited 2 times in total |
|
Back to top |
|
|
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Fri Sep 26, 2014 12:09 Post subject: |
|
|
Skif_off wrote: | %P%N и %P%N recurs для папки под курсором - пока отлаживаю |
То есть, это возможность пока не реализованна? |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Fri Sep 26, 2014 12:32 Post subject: |
|
|
SVM
Реализована, просто второпях дописывал пост и ошибся, потом забыл исправить. Исправил.
Была мысль посмотреть что консольное для TIFF/PSD/RAW, но они менее распространены (продвинутое/профессиональное фото/полиграфия в основном) и несжатые: наверное, как с DVD - несколько секторов, забитых нулями/кашей, не проблема, тогда оптимизация алгоритмом Хаффмана не вариант. |
|
Back to top |
|
|
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Fri Sep 26, 2014 12:57 Post subject: |
|
|
Skif_off
У меня если в параметрах кнопки прописать %P%N или %P%N recurs, всё равно открывается окно обзор папок.
Code: | TOTALCMD#BAR#DATA
"c:\Program Files\JpegTran\jpgtest.au3"
%P%N recurs
C:\Program Files\AutoIt3\AutoIt3.exe,3
jpgtest
c:\Program Files\JpegTran\
-1 |
Total Commander 8.0, WindowsXP sp2, AutoIt 3.3.8.1 |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Fri Sep 26, 2014 14:39 Post subject: |
|
|
SVM
Попробуйте запуск в виде AutoIt3.exe file. У меня так работает
Code: | TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\AutoIt3.exe" "%COMMANDER_PATH%\UTILITIES\JPEGTest\jpgtest.au3"
%P%N recurs
%COMMANDER_PATH%\AutoIt3.exe
jpgtest
%COMMANDER_PATH%\UTILITIES\JPEGTest\
-1
|
Собственно, у меня и в вашем варианте запускается правильно.
Скрипт чуть изменен, упустил вариант: если нажать Отмена в окне обзора папок, то скрипт всё равно пытается продолжить работу, хотя путь будет пустым и в конечном итоге вылезет ошибка Неверный путь!. |
|
Back to top |
|
|
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Fri Sep 26, 2014 17:37 Post subject: |
|
|
Skif_off
Так работает! Хорошо бы ещё, если было можно сворачивать в трей по кнопке свернуть. |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Fri Sep 26, 2014 19:05 Post subject: |
|
|
SVM
Честно говоря, не хочется раздувать скрипт: нужно прикручивать цикл While...WEnd, опрашивать GUI, кнопку закрытия ещё, потом кто-нибудь попросит добавить хоткей (да и без просьбы, напрашивается)...
В общем - не обещаю. А чем плох Alt+Tab? |
|
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
|