Eingelesenes Array nach files durchsuchen ?

  • Hallo Gemeinde

    Ich habe in den letzten tagen dank der tollen Hilfe dieses Forums einen script erstellt der mir alles Platten durchsucht, mir die gesamten Verzeichnise in einer Textdatei auf der jeweiligen Platte ausgibt und eine weitere Textdatei erstellt iin der er mir die Space daten ausgibt.


    ich möchte allerdings erreichen das das Script nur .rar files, .mp3 files, .jpg files in jeweils einer Textdatei ausgibt, aber wüsste jetzt nicht wie ich das entstandene Array diesen Parametern entsprechend durchsuchen / manipulieren könnte.

    villeicht könnt ihr mir helfen Danke


    Script :

    Spoiler anzeigen
    [autoit]

    ;Von Kenngott Marco (Eistee, AsusExcite)
    ;E-Mail : [email='marco.kenngott@live.de'][/email]
    ;
    ;
    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $dRives
    Global $dRives2
    Global $dRivespace
    Global $dRivespace2
    Global $dRivespaceB
    Global $dRivespace2B
    Global $dRivespaceC
    Global $dRivespace2C
    Global $dRivespaceD
    Global $dRivespace2D
    Global $iA

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $dRives = DriveGetDrive("fixed")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $iA = 1 To $dRives[0]
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $iA = 1 To $dRives[0]
    _FileListCreate()
    _FileSpaceData()
    ;MsgBox(1,"Laufwerke ausser C:\ Nr." & $iA, $dRives[$iA])
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileSpaceData()
    $dRivespace = DriveSpaceFree($dRives[$iA] & "\")
    $dRivespace2 = DriveSpaceTotal($dRives[$iA] & "\")
    $dRivespaceB = StringSplit($dRivespace, ".")
    $dRivespace2B = StringSplit($dRivespace2, ".")
    $dRivespaceC = $dRivespaceB[1] / 1000
    $dRivespace2C = $dRivespace2B[1] / 1000
    $dRivespaceD = StringSplit($dRivespaceC, ".")
    $dRivespace2D = StringSplit($dRivespace2C, ".")
    FileDelete($dRives[$iA] & "\DriveSpace.txt")
    FileDelete($dRives[$iA] & "\DriveSpace.txt")
    FileWriteLine($dRives[$iA] & "\DriveSpace.txt", $dRivespace2D[1] & " Gb" & @CRLF)
    FileWriteLine($dRives[$iA] & "\DriveSpace.txt", $dRivespaceD[1] & " Gb" & @CRLF)
    EndFunc ;==>_FileSpaceData

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileListCreate()
    $dRives2 = _RecursiveFileListToArray($dRives[$iA] & "\")
    _ArraySort($dRives2)
    FileDelete($dRives[$iA] & "\filelist.txt")
    _FileWriteFromArray($dRives[$iA] & "\filelist.txt", $dRives2)
    EndFunc ;==>_FileListCreate

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ; und: AspirinJunkie (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
    Local $hSearch, $sFile, $sReturn = '', $aD
    Local Static $hDll
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    $aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
    If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $fOpenDLL Then DllClose($hDll)
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]
  • Du könntest das Array mit einer Schleife durchlaufen und nur die Dateien, die du willst, in ein neues Array schreiben.

    [autoit]


    Local $mp3Array [500000]
    Local $mp3cnt = 0
    Local $rarArray [500000]
    Local $rarcnt = 0
    Local $jpgArray [500000]
    Local $jpgcnt = 0

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($dRives2) - 1
    If StringInStr($dRives2[$i], ".jpg") Then
    $jpgArray[$jpgcnt] = $dRives2[$i]
    $jpgcnt += 1
    Elseif StringInStr($dRives2[$i], ".mp3") Then
    $mp3Array[$mp3cnt] = $dRives2[$i]
    $mp3cnt += 1
    Elseif StringInStr($dRives2[$i], ".rar") Then
    $rarArray[$rarcnt] = $dRives2[$i]
    $rarcnt += 1
    EndIf
    Next
    ReDim $jpgArray[$jpgcnt + 1]
    ReDim $rarArray[$rarcnt + 1]
    ReDim $mp3Array[$mp3cnt + 1]
    _FileWriteFromArray("C:\testfilejpg.txt", $jpgArray)
    _FileWriteFromArray("C:\testfilerar.txt", $rarArray)
    _FileWriteFromArray("C:\testfilemp3.txt", $mp3Array)

    [/autoit]

    das ganze in deine _FileListCreate Funktion setzen

  • hmmm.. danke dir für die hilfe jedoch findet er irgendwie nichts keine rar, keine jpg und auch keine mp3 habe ich es falsch verbaut ?

    Spoiler anzeigen
    [autoit]

    ;Von Kenngott Marco (Eistee, AsusExcite)
    ;E-Mail : [email='marco.kenngott@live.de'][/email]
    ;
    ;
    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $dRives
    Global $dRives2
    Global $dRivespace
    Global $dRivespace2
    Global $dRivespaceB
    Global $dRivespace2B
    Global $dRivespaceC
    Global $dRivespace2C
    Global $dRivespaceD
    Global $dRivespace2D
    Global $iA

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $dRives = DriveGetDrive("fixed")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Not @error Then
    For $iA = 1 To $dRives[0]
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $iA = 1 To $dRives[0]
    _FileListCreate()
    _FileSpaceData()
    ;MsgBox(1,"Laufwerke ausser C:\ Nr." & $iA, $dRives[$iA])
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileSpaceData()
    $dRivespace = DriveSpaceFree($dRives[$iA] & "\")
    $dRivespace2 = DriveSpaceTotal($dRives[$iA] & "\")
    $dRivespaceB = StringSplit($dRivespace, ".")
    $dRivespace2B = StringSplit($dRivespace2, ".")
    $dRivespaceC = $dRivespaceB[1] / 1000
    $dRivespace2C = $dRivespace2B[1] / 1000
    $dRivespaceD = StringSplit($dRivespaceC, ".")
    $dRivespace2D = StringSplit($dRivespace2C, ".")
    FileDelete($dRives[$iA] & "\DriveSpace.txt")
    FileDelete($dRives[$iA] & "\DriveSpace.txt")
    FileWriteLine($dRives[$iA] & "\DriveSpace.txt", $dRivespace2D[1] & " Gb" & @CRLF)
    FileWriteLine($dRives[$iA] & "\DriveSpace.txt", $dRivespaceD[1] & " Gb" & @CRLF)
    EndFunc ;==>_FileSpaceData

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileListCreate()
    $dRives2 = _RecursiveFileListToArray($dRives[$iA] & "\")
    _ArraySort($dRives2)
    FileDelete($dRives[$iA] & "\filelist.txt")
    _FileWriteFromArray($dRives[$iA] & "\filelist.txt", $dRives2)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $mp3Array [500000]
    Local $mp3cnt = 0
    Local $rarArray [500000]
    Local $rarcnt = 0
    Local $jpgArray [500000]
    Local $jpgcnt = 0

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($dRives2) - 1
    If StringInStr($dRives2[$i], ".jpg") Then
    $jpgArray[$jpgcnt] = $dRives2[$i]
    $jpgcnt += 1
    Elseif StringInStr($dRives2[$i], ".mp3") Then
    $mp3Array[$mp3cnt] = $dRives2[$i]
    $mp3cnt += 1
    Elseif StringInStr($dRives2[$i], ".rar") Then
    $rarArray[$rarcnt] = $dRives2[$i]
    $rarcnt += 1
    EndIf
    Next
    ReDim $jpgArray[$jpgcnt + 1]
    ReDim $rarArray[$rarcnt + 1]
    ReDim $mp3Array[$mp3cnt + 1]
    _FileWriteFromArray("C:\testfilejpg.txt", $jpgArray)
    _FileWriteFromArray("C:\testfilerar.txt", $rarArray)
    _FileWriteFromArray("C:\testfilemp3.txt", $mp3Array)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_FileListCreate

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ; und: AspirinJunkie (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $fRecursion = True, $sDelim = @CRLF, $fOpenDLL = True)
    Local $hSearch, $sFile, $sReturn = '', $aD
    Local Static $hDll
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    If $fOpenDLL Then $hDll = DllOpen('kernel32.dll')
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    $aD = DllCall($hDll, 'dword', 'GetFileAttributesW', 'wstr', $sPath & $sFile)
    If @error Or BitAND($aD[0], 0x400) Then ContinueLoop
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $fRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, True, $sDelim, False)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $fOpenDLL Then DllClose($hDll)
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]
  • das war nur ein Beispielcode, du müsstest die Pfade noch anpassen.

    [autoit]

    _FileWriteFromArray($dRives[$iA] & "\testfilejpg.txt", $jpgArray)
    _FileWriteFromArray($dRives[$iA] & "\testfilerar.txt", $rarArray)
    _FileWriteFromArray($dRives[$iA] & "\testfilemp3.txt", $mp3Array)

    [/autoit]