#include <Constants.au3>
;~ Проверяем наличие INI-файла и при отсутствии данного создаем автоматически со следующими параметрами
;~ Название 1-ой секции [InBox] - в данной секции прописывается путь к каталогу в котором хранятся проверяемые файлы
;~ Название переменной - Path
;~ Значение по умолчанию - C:\Box\In
;~ Название 2-ой секции [OutBox] - в данной секции прописывается путь к каталогу в котором будут хранятся проверенные файлы содержащие 2 ЭЦП
;~ Название переменной - Path
;~ Значение по умолчанию - C:\Box\Out
If Not FileExists(@ScriptDir & "\Test.ini") Then
$fileINI = FileOpen(@ScriptDir & "\Test.ini", 2)
FileWriteLine($fileINI, "[InBox]")
FileWriteLine($fileINI, "Path=C:\Box\In")
FileWriteLine($fileINI, "[OutBox]")
FileWriteLine($fileINI, "Path=C:\Box\Out")
FileClose($fileINI)
EndIf
;~ Считываем из INI-файла значение переменной Path находящейся в секции [InBox] - путь к каталогу в котором хранятся проверяемые файлы
;~ (Значение по умолчанию - C:\Box\In)
$PathInBox=IniRead ( @ScriptDir & "\Test.ini", "InBox", "Path", "C:\Box\In" )
;~ Считываем из INI-файла значение переменной Path находящейся в секции [OutBox] - путь к каталогу в котором будут хранятся проверенные файлы
;~ (Значение по умолчанию - C:\Box\Out)
$PathOutBox=IniRead ( @ScriptDir & "\Test.ini", "OutBox", "Path", "C:\Box\Out" )
;~ Проверяем наличие файлов в каталоге с проверяемыми файлами
$SearchFile = FileFindFirstFile($PathInBox & "\*.*")
If $SearchFile = -1 Then
;~ В случае отсутствия файлов в данном каталоге выдаем сообщение о том что нет ни одного файла для проверки и закрываем программу
MsgBox(0, "Ошибка", "В указанном каталоге " & $PathInBox & " нет ни одного файла для проверки.")
Exit
EndIf
;~ В цикле проходим по всем файлам содержащимся в каталоге проверяемых файлов
While 1
;~ Получаем имя файла
$FileFind = FileFindNextFile($SearchFile)
;~ Если мы не можем получить новое имя файла, то завершаем выполнение цикла
If @error Then ExitLoop
;~ Имя проверяемого файла получено, поэтому для каждого проверяемого файла создаем специальный CMD-файл с командной строкой проверки файла
$FileCMD = FileOpen(@ScriptDir & "\test.cmd", 2)
FileWriteLine($FileCMD, '"C:\Program Files\CheckFile\CheckFile.exe" /n "' & $PathInBox & '\' & $FileFind & '"')
FileClose($FileCMD)
;~ Запускаем созданный CMD-файл на выполнение
$foo=Run(@ScriptDir & "\test.cmd", $PathInBox , @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
;~ Выводим в переменную $WorkCMD результаты проверки файла
$WorkCMD=""
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
IF NOT StringIsSpace($line) Then
$WorkCMD=$WorkCMD & $line
EndIf
Wend
;~ Переводим значение переменной $WorkCMD из DOS-кодировки в Windows-кодировку
$WorkCMD=OemToAnsi($WorkCMD)
;~ Считываем из переменной $WorkCMD построчно данные и в зависимости от находящейся в них
;~ информации обрабатываем файл
$LineWorkCMD = StringSplit($WorkCMD, @CR)
For $i=1 to $LineWorkCMD[0]
;~ Проверяем строку, необходимо чтобы в ней содержалось указание на то куда перемещать
;~ файл
If StringInStr($LineWorkCMD[$i],"outbox")>0 Then
FileMove($PathInBox & '\' & $FileFind , $PathOutBox & '\' & @MON & '_' & @MDAY & '\' & $FileFind,8)
$i=$LineWorkCMD[0]
Else
MsgBox(4096, "Результаты проверки файла: " & $FileFind , "В данном файле осутствуют указания для сортировки - повторите процедуру отправки файлов заново! ")
EndIf
Next
WEnd
FileClose($SearchFile)
Exit
func OemToAnsi ($inline)
Local $stString = DLLStructCreate("char[" & StringLen($inline)+2 & "]")
DllStructSetData($stString,1,$inline)
DllStructSetData($stString,1,chr(0),StringLen($inline)+2)
DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($stString), "ptr",DllStructGetPtr($stString) )
Return DllStructGetData($stString,1)
EndFunc
func AnsiToOem ($inline)
Local $stString = DLLStructCreate("char[" & StringLen($inline)+2 & "]")
DllStructSetData($stString,1,$inline)
DllStructSetData($stString,1,chr(0),StringLen($inline)+2)
DllCall("user32.dll", "long", "CharToOem", "ptr", DllStructGetPtr($stString), "ptr",DllStructGetPtr($stString) )
Return DllStructGetData($stString,1)
EndFunc