Что нового

Сравнение файлов в папках и их обработка

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Версия AutoIt: 3.3.x.x

Описание:

Существуют 3 папки:

Папка-1 (условно большая)
Папка-2 (условно маленькая)
Папка-3 (условно "отстойник")

Надо проверить, существуют ли файлы из Папка-2 в Папка-1
В случае совпадения наличия таких файлов:
Сравнить их размеры,
Если размер (аналогичного файла) в Папка-2 > размера файла в Папка-1, то оставить как есть,
Иначе (если размер <=) этот "обрабатываемый" файл переместить в Папка-3

Примечания:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Кажется так:
Код:
_main()
If @error Then Exit MsgBox(16, "error" & @error, "Error " & @error)
MsgBox(0, "Success", "Success", 5)


Func _main()
	Local $dir1, $dir2, $dir3, $hFile, $sFilename ; объявление переменных

	; Существуют 3 папки:
	$dir1 = @ScriptDir & "\Папка-1" ; Папка-1 (условно большая)
	$dir2 = @ScriptDir & "\Папка-2" ; Папка-2 (условно маленькая)
	$dir3 = @ScriptDir & "\Папка-3" ; Папка-3 (условно "отстойник")
	$hFile = FileFindFirstFile($dir2 & "\*.*") ; начинаем искать
	If $hFile = -1 Or @error = 1 Then Return SetError(1, 0, 0)
	While 1
		$sFilename = FileFindNextFile($hFile) ; получаем файл из папки
		If @error Then ExitLoop ; если ошибка, то выход
		If @extended = 1 Then ContinueLoop ; если не файл, а каталог, пропустить и продолжить поиск далее

		; проверка:
		If FileExists($dir1 & "\" & $sFilename) Then ; существуют ли файлы из Папка-2 в Папка-1
			; В случае совпадения наличия таких файлов:
			; Сравнить их размеры,
			If FileGetSize($dir2 & "\" & $sFilename) > FileGetSize($dir1 & "\" & $sFilename) Then
				; Если размер (аналогичного файла) в Папка-2 > размера файла в Папка-1, то оставить как есть,
				ContinueLoop
			Else
				; Иначе (если размер <=) этот "обрабатываемый" файл
				FileMove($dir2 & "\" & $sFilename, $dir3 & "\" & $sFilename, 1) ; переместить в Папка-3
			EndIf
		EndIf
	WEnd
	FileClose($hFile) ; закрыть указатель на поиск
	Return SetError(0, 0, 1)
EndFunc   ;==>_main
 
Верх