Automatische Erkennung von Dateien

  • Gibt es schon ein Script, welches automatisch erkennen kann, um welches Format es sich bei einer heruntergelandenen Datei handelt und diese bei gepackten zustand entpackt. eventl. noch alle möglichen varianten enthält, zum starten (bei .exe = Run,...) ?

  • Um Dateitypen zu erkennen hatte ich in folgendem Script mal eine Funktion geschrieben... Allerdings erkennt sie nur .jpg .png .gif .mp3 .mp4 .flv und .exe Dateien. ;) Um ein Zip-Archiv zu entpacken kannst du die 7za.exe von 7Zip verwenden. (Einfach mal googeln)

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    Local $hFile, $sContent, $sCacheDir = @UserProfileDir & "\AppData\Local\Google\Chrome\User Data\Default\Cache\", $sDestDir = @ScriptDir & "\cache\"
    Local $aPath = _FileListToArray($sCacheDir)
    If Not FileExists($sDestDir) Then DirCreate($sDestDir)

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

    For $i = 1 To $aPath[0]
    $hFile = FileOpen($sCacheDir & $aPath[$i], 16)
    $sTyp = _GetFileFormat($hFile)
    If Not @error Then
    If Not FileExists($sDestDir & $sTyp & "\") Then DirCreate($sDestDir & $sTyp & "\")
    FileCopy($sCacheDir & $aPath[$i], $sDestDir & $sTyp & "\" & $aPath[$i] & $sTyp, 1)
    Else
    If Not FileExists($sDestDir & "Unknow\") Then DirCreate($sDestDir & "Unknow\")
    FileCopy($sCacheDir & $aPath[$i], $sDestDir & "Unknow\" & $aPath[$i], 1)
    EndIf
    FileClose($hFile)
    Next
    ShellExecute($sDestDir)

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

    Func _GetFileFormat($hFile)
    Local $8Byte = FileRead($hFile, 8), $6Byte = BinaryMid($8Byte, 1, 6), $4Byte = BinaryMid($8Byte, 1, 4), $3Byte = BinaryMid($8Byte, 1, 3), $2Byte = BinaryMid($8Byte, 1, 2)
    Select
    Case $8Byte = "0x89504E470D0A1A0A"
    Return ".png"
    Case $3Byte = "0xFFD8FF"
    Return ".jpg"
    Case $6Byte = "0x474946383961" Or $6Byte = "0x474946383761"
    Return ".gif" ; by Christoph54 (autoit.de)
    Case $3Byte = "0x494433" Or $2Byte = "0xFFFB"
    Return ".mp3"
    Case $3Byte = "0x464C56"
    Return ".flv"
    Case StringLeft($8Byte, 8) = "0x000000" And StringMid($8Byte, 11, 18) = "66747970" ; "0x000000..66747970"
    Return ".mp4"
    Case $2Byte = "0x4D5A" Or $2Byte = "0x5A4D"
    Return ".exe"
    Case Else
    SetError(1, Default, "")
    EndSelect
    EndFunc ;==>_GetFileFormat

    [/autoit]

    LG
    Christoph :)

  • Die meisten Dateitypen haben eine Dateisignatur an der sie eindeutig erkennbar sind.
    Hier ist ein guter Startpunkt.

  • danke leute, leider bin ich noch nicht ganz so fit wie ihr... vielleicht hat ja jemand eine lösung, welche einer in seiner schublade verborgen wiederfindet.. ;) danke

    Wir werden dir verdammt nochmal kein Script schreiben! :cursing:


    Wenn es dir zu schwer ist, schreib mal leichtere Scripte.
    Arbeite dich durch verschiedene Turoials, such einfach mal bei Google, YT & Co.

    Und falls du Autoit nicht lernen möchtest sondern nur Scripte abgreifen, dann bist du hier falsch. (Zumindest falsches Unterforum)

    Ansonst,

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski