Что нового

Проверка - пустые ли определенные папки

Сообщения
97
Репутация
-1
Здравствуйте.
Помогите поправить скрипт.

Скрипт должен бы проверять в заданном каталоги - огромное множество папок различной вложенности с названием "папка.iso".
На предмет того - пустые они или в них что-то лежит.
Но скрипт почему-то не работает - пишет в лог, что ничего не нашел (хотя я самостоятельно заполняю эти папки содержимым).

Как изменить скрипт, чтобы он нормально искал все папки разной вложенности с названием "папка.iso" и проверял - пустые они или в них что-то есть ?
Код:
#include <File.au3>
#include <Array.au3>

Local $sRootFolder = @ScriptDir & "\1н 23" ; папка для поиска
Local $sOutputFile = @ScriptDir & "\iso_folders_found.txt"

FileDelete($sOutputFile)
Local $hFile = FileOpen($sOutputFile, 2)
If $hFile = -1 Then
    MsgBox(0, "ошибка", "не найден: " & $sOutputFile)
    Exit
EndIf

FileWriteLine($hFile, "Путь: " & $sRootFolder)
FileWriteLine($hFile, "Начало поиска: " & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
FileWriteLine($hFile, StringRepeat("=", 61))
FileWriteLine($hFile, "")

Local $iFoundCount = 0
$iFoundCount = SearchISOFolders($sRootFolder, $hFile)

FileWriteLine($hFile, "")
FileWriteLine($hFile, StringRepeat("=", 61))
FileWriteLine($hFile, "Завершено: " & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
FileWriteLine($hFile, "Найдено: " & $iFoundCount)

FileClose($hFile)

MsgBox(0, "Информация", "Найдено " & $iFoundCount & @CRLF & "Результаты: " & $sOutputFile)

Func StringRepeat($sString, $iCount)
    Local $sResult = ""
    For $i = 1 To $iCount
        $sResult &= $sString
    Next
    Return $sResult
EndFunc

Func SearchISOFolders($sPath, $hOutputFile)
    Local $iCount = 0
    Local $hSearch = FileFindFirstFile($sPath & "\*")

    If $hSearch = -1 Then Return 0

    While 1
        Local $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop

        Local $sFullPath = $sPath & "\" & $sFile

        If @extended Then
            If StringRight(StringLower($sFile), 4) = "текст.iso" Then
                If Not IsFolderEmpty($sFullPath) Then
                    FileWriteLine($hOutputFile, $sFullPath)
                    $iCount += 1
                EndIf
            EndIf

            $iCount += SearchISOFolders($sFullPath, $hOutputFile)
        EndIf
    WEnd

    FileClose($hSearch)
    Return $iCount
EndFunc

Func IsFolderEmpty($sFolderPath)
    Local $hSearch = FileFindFirstFile($sFolderPath & "\*")
    If $hSearch = -1 Then Return True

    Local $sFirstFile = FileFindNextFile($hSearch)
    FileClose($hSearch)

    If @error Then
        Return True
    Else
        Return False
    EndIf
EndFunc
 
Автор
D
Сообщения
97
Репутация
-1
".iso" - это не расширение файла, а часть названия папки
 
Автор
D
Сообщения
97
Репутация
-1
Я не понял.
У меня папка называется "текст.iso" а не ".iso"
 

InnI

AutoIT Гуру
Сообщения
4,992
Репутация
1,461
Функция StringRight возвращает указанное число символов строки справа.
Код:
If StringRight(StringLower($sFile), 4) = ".iso" Then

Данное условие означает: если 4 символа справа у названия папки равны ".iso", тогда...
И не важно, какой "текст" перед ".iso"
 
Автор
D
Сообщения
97
Репутация
-1
Да, но мне важно какой текст перед .iso
Там есть и другие папки с завершением .iso - и туда скрипту лезть не надо.
 
Верх