unrar.exe commandlinetool Prozentwert auslesen

  • hallo leute, bräuchte mal wieder eure hilfe:-)

    wenn ich mit dem commandline-tool unrar.exe (freeware) dateien entpacke, zeigt mir das tool ja auch
    an, wieviel prozent das tool schon entpackt hat.

    meine frage ist nun, ob ich den jeweils aktuellen prozentwert irgendwie "auslesen" kann, um den wert
    z.b. in einer progressbar zu verwenden.

    geht das irgendwie? oder ist es eventuell mit der .dll version von unrar möglich.

    danke schon mal für eure antworten.

    lg diggidie

    Einmal editiert, zuletzt von Diggidie (29. März 2011 um 01:50)

  • Also ich schalt mich mal ein weils mich grad interessiert :P

    @ AutoBert
    Das funkt echt super so die Prozente zu bekommen.
    Aber die kommen relative ungeordnet und machmal doppelt raus?

    [autoit]

    #include <Constants.au3>
    Global $ReadinfC
    $pid=Run("unrar.exe x -o+ t.rar","", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While $pid > 0
    $Readinfo=StdoutRead ($pid,False,False)
    If @error Then ExitLoop
    If $ReadinfC <> $Readinfo Then
    ConsoleWrite($Readinfo&@CRLF)
    EndIf
    $ReadinfoC = $Readinfo
    WEnd

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

    EDIT: Fällt besonders auf wenn das archive viele kleine einzeldatein hat.

    Einmal editiert, zuletzt von Matthias_199 (23. März 2011 um 14:22)

  • autoBert
    Habe StdoutRead noch nie irgendwie benötigt.
    habe mal ein wenig probiert, doch für mich kommen da
    nur böhmische dörfer raus ?( (anfänger halt ;( , sorry)
    das einzige was mir bei der ausgabe entgegenkam, ist, das
    am ende der ausgabe immer eine prozentzahl oder ein "ok" rauskam.
    den konnte ich dann verarbeiten, wie man an meinem script sehen
    kann. das script ist mit sicherheit besser und einfacher zu schreiben,
    wäre für kritik und verbesserungsvorschläge sehr dankbar :rock:


    @Matthias_199
    mein script funktioniert einwandfrei, wenn in dem archiv nur eine
    datei gepackt ist (was für mein programm immer so vorgesehen ist).
    funktioniert aber nicht mit mehreren dateien :thumbdown: .
    aber hier können doch mit sicherheit die profis hilfe leisen :thumbup:
    Würde mich auch sehr interessieren.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Global $Lese_UnRAR_Ausgabe
    $UnRAR_Pfad = @ScriptDir & "\UnRAR.exe"
    $Archiv_Name = @ScriptDir & "\Test.rar"

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

    $Gui = GUICreate("UnRAR Progressbar", 500, 140)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $Progressbar = GUICtrlCreateProgress (20, 20, 460, 50)
    $StartButton = GUICtrlCreateButton("Starte entpacken...", 175, 90, 150, 30)
    GUICtrlSetOnEvent (-1, "_StartButton")
    GUISetState()

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

    While 1
    Sleep (10)
    WEnd

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

    Func _StartButton ()
    $Lese_UnRAR_Ausgabe = Run ($UnRAR_Pfad & ' x -o+ "' & $Archiv_Name & '" ' & @ScriptDir & "\UnRAR-Test\", "", @SW_HIDE, 2)
    AdlibRegister ("_Progressbar")
    ProcessWaitClose ("UnRAR.exe")
    GUICtrlSetData ($Progressbar, 100) ; der Optik halber, weil UnRAR scheinbar keine 100% ausgibt
    AdlibUnRegister ("_Progressbar")
    EndFunc

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

    Func _Progressbar ()
    $Lese_StdoutRead_Ausgabe = StdoutRead ($Lese_UnRAR_Ausgabe)
    $Lese_Letzte_3_Zeichen = StringRight ($Lese_StdoutRead_Ausgabe, 3) ; kürzt den String auf die letzten 3 Zeichen (ist eine % Zahl oder OK)
    $Lese_Erste_2_Zeichen = StringLeft ($Lese_Letzte_3_Zeichen, 2) ; kürzt das % Zeichen weg
    $Entferne_Leerzeichen = StringStripWS ($Lese_Erste_2_Zeichen, 8) ; entfernt Leerzeichen bei einstelligen Zahlen
    If StringIsDigit ($Entferne_Leerzeichen) Then GUICtrlSetData ($Progressbar, $Entferne_Leerzeichen) ; wenn nur eine Zahl übrig bleibt wird die Prozessbar aktualisiert
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • @Matthias_199
    habs mal mit deinem script probiert und ein wenig experimentiert.
    learning by doing bringt halt auch mal positive ergebnisse.
    und siehe da, es funktioniert auch mit mehreren datein im archiv.

    hier mal die Daten für meinen Test:
    UnRAR.exe in der neuesten Version 4.0
    Test-Archiv mit 200 Dateien (größe zwischen 15kb und 40kb)

    Script, UnRAR.exe und eine Test.rar in ein Verzeichnis packen.
    Entpackt wird nach @ScriptDir & "\UnRAR-Test\"

    Vielleicht gehts ja noch einfacher (evtl bezüglich der strings?).
    dann bitte posten.

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    Opt ("GUIOnEventMode", 1)

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

    $UnRAR_Pfad = @ScriptDir & "\UnRAR.exe"
    $Archiv_Name = @ScriptDir & "\Test.rar"

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

    $Gui = GUICreate ("UnRAR Progressbar", 500, 140)
    GUISetOnEvent ($GUI_EVENT_CLOSE, "_Exit")
    $Progressbar = GUICtrlCreateProgress (20, 20, 460, 50)
    $StartButton = GUICtrlCreateButton("Starte entpacken...", 175, 90, 150, 30)
    GUICtrlSetOnEvent (-1, "_StartButton")
    GUISetState ()

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

    While 1
    Sleep (10)
    WEnd

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

    Func _StartButton ()
    $UnRAR = Run ($UnRAR_Pfad & ' x -o+ "' & $Archiv_Name & '" ' & @ScriptDir & "\UnRAR-Test\", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While $UnRAR > 0
    $Lese_StdoutRead_Ausgabe = StdoutRead ($UnRAR, False, False)
    If @error Then ExitLoop
    $Lese_Letzte_3_Zeichen = StringRight ($Lese_StdoutRead_Ausgabe, 3) ; kürzt den String auf die letzten 3 Zeichen (ist eine % Zahl oder OK)
    $Lese_Erste_2_Zeichen = StringLeft ($Lese_Letzte_3_Zeichen, 2) ; kürzt das % Zeichen weg
    $Entferne_Leerzeichen = StringStripWS ($Lese_Erste_2_Zeichen, 8) ; entfernt Leerzeichen bei einstelligen Zahlen
    If StringIsDigit ($Entferne_Leerzeichen) Then GUICtrlSetData ($Progressbar, $Entferne_Leerzeichen) ; wenn nur eine Zahl übrig bleibt wird die Prozessbar aktualisiert
    WEnd
    GUICtrlSetData ($Progressbar, 100) ; der Optik halber, weil UnRAR scheinbar keine 100% ausgibt
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Ja das kannste ja dierekt in die GUI posten.
    musste das "BS" eben wegmachen, ich hab jetz nicht mehr weiter daran gebaut.
    Aber wenn du willst kann ich ja mal versuchen die func mal gescheit umzusetzen

  • @Matthias_199
    das wäre natürlich klasse, wenn du dir das nochmal anschaust.
    wie gesagt, funktionieren tut es ja (danke nochmal für dein script)
    glaube halt, das man das auflösen des prozentwertes besser lösen könnte.

  • Ja genau das ises das passt mir ja auch nicht ^^
    Aber du rbaucht in den nächsten 24H da nixht werwarten bin auf abschluss feier :D