lettterssino
Знающий
- Сообщения
- 109
- Репутация
- 10
Добрый день, написал маленький скрипт, который сравнивает 2 папки по файлам. А точнее сравнивает отличия в версии файлов и их размере, как они продвигаются. Т.к. сам не опытный в этом вопросе, но каким методом возможно ускорить его работу
Код:
#include <UIAutomate.au3>
#include <File.au3>
#include <Date.au3>
#include <FileOperations.au3>
#include <FileConstants.au3>
#include <Constants.au3>
#include <Encoding.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <ScreenCapture.au3>
#include <Array.au3>
#RequireAdmin
_WinAPI_CreateFile (@DesktopDir & "\compare.log",1)
$Dir1Papka = FileSelectFolder ("Выберите первую папку",'',4)
if @error Then
exit 1
EndIf
$Dir2Papka= FileSelectFolder ("Выберите вторую папку",'',4)
if @error Then
exit 1
EndIf
$KolFile1papka = _FO_FileSearch($Dir1Papka, 'svn-base', False, 125, 2, 1, 0) ; ищет количество файлов в папке с параметром 1
Global $KolFile = $KolFile1papka[0] ; выводит количество файлов в папке
$hTimer = TimerInit()
ProgressOn("Сравнение файлов", '', '', -1, 100, 18)
$i = 0
$d = 0
While $i <= ($KolFile - 1) ; при верном условии цикл повторяется
$Proc = (( $i + $d )/(($KolFile -1)*2))*100
ProgressSet($Proc,"Проверенно файлов 1 стадия: " & $i & @CR & "Проверено файлов 2 стадия: " & $d,"Направление проверки: прямое")
$aFileList1Papka = _FO_FileSearch($Dir1Papka, 'svn-base', False, 125, 1, 2, 0) ; ищет полный путь к файлам
$aFileListPapka1 = _FO_FileSearch($Dir1Papka, 'svn-base', False, 125, 0, 2, 0) ; выводит относительный путь
$aFileList1Papka1 = _FO_FileSearch($Dir1Papka, 'svn-base', False, 125, 2, 2, 0) ; выводит короткое имя файла с расширением
$Vers1 = FileGetVersion ($aFileList1Papka[$i])
$FileSize1 = FileGetSize ($aFileList1Papka[$i])
if FileExists ($Dir2Papka &'\' & $aFileListPapka1[$i]) = 1 Then
$Vers2=FileGetVersion ($Dir2Papka &'\' & $aFileListPapka1[$i])
$FileSize2= FileGetSize ($Dir2Papka &'\' & $aFileListPapka1[$i])
If $FileSize1 <> $FileSize2 And $Vers1 <> $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$i] & ' Версия: ' & $Vers1 & " Размер: " & $FileSize1)
_FileWriteLog($hFile, $aFileListPapka1[$i] & ' Версия: ' & $Vers2 & " Размер: " & $FileSize2)
_FileWriteLog($hFile, "")
ElseIf $FileSize1 = $FileSize2 And $Vers1 <> $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$i] & ' Версия: ' & $Vers1 & " Размер не изменился")
_FileWriteLog($hFile, $aFileListPapka1[$i] & ' Версия: ' & $Vers2 & " Размер не изменился")
_FileWriteLog($hFile, "")
ElseIf $FileSize1 <> $FileSize2 And $Vers1 = $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$i] & ' Версия не изменилась' & " Размер: " & $FileSize1 & " <<====== Ошибка =====>>" )
_FileWriteLog($hFile, $aFileListPapka1[$i] & ' Версия не изменилась' & " Размер: " & $FileSize2 & " <<====== Ошибка =====>>" )
_FileWriteLog($hFile, "")
EndIf
Else
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$i] & ' Версия: ' & $Vers1 & " Размер: " & $FileSize1)
_FileWriteLog($hFile, "↑↑↑↑↑↑↑ Файла отсутствует во второй папке ↑↑↑↑↑↑↑")
_FileWriteLog($hFile, "")
EndIf
$i = $i + 1
WEnd
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, " ====== ====== ====== ====== ====== ===== ====== ====== ======" )
_FileWriteLog($hFile, " ====== ====== ====== ====== Реверс ===== ====== ====== ======" )
_FileWriteLog($hFile, " ====== ====== ====== ====== ====== ===== ====== ====== ======" )
_FileWriteLog($hFile, "" )
$KolFile1papka = _FO_FileSearch($Dir2Papka, 'svn-base', False, 125, 2, 1, 0) ; ищет количество файлов в папке с параметром 1
Global $KolFile = $KolFile1papka[0] ; выводит количество файлов в папке
While $d <= ($KolFile - 1) ; при верном условии цикл повторяется
$Proc = (( $i + $d )/(($KolFile -1)*2))*100
ProgressSet($Proc,"Проверенно файлов 1 стадия: " & $i & @CR & "Проверено файлов 2 стадия: " & $d,"Направление проверки: прямое")
$aFileList1Papka = _FO_FileSearch($Dir2Papka, 'svn-base', False, 125, 1, 2, 0) ; ищет полный путь к файлам
$aFileListPapka1 = _FO_FileSearch($Dir2Papka, 'svn-base', False, 125, 0, 2, 0) ; выводит относительный путь
$aFileList1Papka1 = _FO_FileSearch($Dir2Papka, 'svn-base', False, 125, 2, 2, 0) ; выводит короткое имя файла с расширением
$Vers1 = FileGetVersion ($aFileList1Papka[$d])
$FileSize1 = FileGetSize ($aFileList1Papka[$d])
if FileExists ($Dir2Papka &'\' & $aFileListPapka1[$d]) = 1 Then
$Vers2=FileGetVersion ($Dir1Papka &'\' & $aFileListPapka1[$d])
$FileSize2= FileGetSize ($Dir1Papka &'\' & $aFileListPapka1[$d])
If $FileSize1 <> $FileSize2 And $Vers1 <> $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$d] & ' Версия: ' & $Vers1 & " Размер: " & $FileSize1)
_FileWriteLog($hFile, $aFileListPapka1[$d] & ' Версия: ' & $Vers2 & " Размер: " & $FileSize2)
_FileWriteLog($hFile, "")
ElseIf $FileSize1 = $FileSize2 And $Vers1 <> $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$d] & ' Версия: ' & $Vers1 & " Размер не изменился")
_FileWriteLog($hFile, $aFileListPapka1[$d] & ' Версия: ' & $Vers2 & " Размер не изменился")
_FileWriteLog($hFile, "")
ElseIf $FileSize1 <> $FileSize2 And $Vers1 = $Vers2 And $Vers1 <> "0.0.0.0" Then
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$d] & ' Версия не изменилась' & " Размер: " & $FileSize1 & " <<====== Ошибка =====>>" )
_FileWriteLog($hFile, $aFileListPapka1[$d] & ' Версия не изменилась' & " Размер: " & $FileSize2 & " <<====== Ошибка =====>>" )
_FileWriteLog($hFile, "")
EndIf
Else
Local $hFile = FileOpen(@DesktopDir & "\compare.log", 1)
_FileWriteLog($hFile, $aFileList1Papka1[$d] & ' Версия: ' & $Vers1 & " Размер: " & $FileSize1)
_FileWriteLog($hFile, "↑↑↑↑↑↑↑ Файл отсутствует во второй папке ↑↑↑↑↑↑↑")
_FileWriteLog($hFile, "")
EndIf
$d = $d + 1
WEnd
ProgressOff()
Global $iDiff = TimerDiff($hTimer)
Local $iDiffMinPrint = StringMid($iDiff / 60000, 1, 5)
If MsgBox(4+32,'Открыть файла с результатами для чтения?', 'Потербовалось '& $iDiffMinPrint & ' мин., проверенно ' & ( $i + $d ) & ' файлов') = 6 Then
ShellExecute (@DesktopDir & "\compare.log")
EndIf