#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 |