Pipe Zurückgabewert

  • Hallo zusammen,

    das ist mein erstes Script in AutoIt.

    Ich will da folgendes machen:

    In 7zip eine datei packen und anschließen prüfen, ob auch alles korrekt abgelaufen ist. das packen funktioniert. Hier geht es mit jetzt allerdings darum, den text einer konsolenausgabe wieder zurück zu erhalten und in eine variable zu schreiben.

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

    ;Prüfung des Arichves wird ausgeführt
    $l = RunWait(@ComSpec & " /c " & $CmdLine[2] & " t " & $CmdLine[3], @ScriptDir, @SW_HIDE)

    If StringLen($err) > 0 Then

    _FileWriteLog(@ScriptDir & "\l.log", $l)

    EndIf

    [/autoit]

    Ich bekomme hier allerdings immer nur eine 0 zurück.

    Gibt es da eine Möglichkeit, den tetx der aus der kommandozeile ausgeben wird in eine vairable zu schreiben?

    der text der normalerweise zurück gegbeben wird sieht foldener maßen aus:

    Einmal editiert, zuletzt von anno (18. Februar 2009 um 20:09)

  • wenn ich das jetzt richtig verstanden habe, wird bei dem run die anwendung nur ausgeführt und dann sofort der rest des scripts durchlaufen.

    kann ich nicht warten, bis die ausgabe aus dem programm komplett fertig ist?

  • probier es mal so z.B.

    [autoit]


    #include <Constants.au3>

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

    Local $cmd = "ipconfig /all" ; hier den Befehl entsprechend ändern
    Local $output = Run($cmd, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
    Local $line

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

    While 1
    $line = StdoutRead($output)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
    Wend

    [/autoit]
    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Hi!

    Wenn du das Beispiel aus der Hilfe etwas umbaust dann funktioniert das eigendlich ganz gut.

    Spoiler anzeigen
    [autoit]


    ; Demonstrates StdoutRead()
    #include <Constants.au3>

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

    Local $foo = Run(@ComSpec & " /c 7za a c:\temp\test c:\temp\info\*", @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
    Wend

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

    While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR read:", $line)
    Wend

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

    MsgBox(0, "Debug", "Exiting...")

    [/autoit]

    If not :?: then ?( else :thumbup:

  • Hi,

    es gibt eine UDF dafür und du kannst mal nach _getDosOutput suchen.

    Mega

    Danke das swcript hat wunderbar funktioniert.

    Oder du schaust nach der UDF in meiner Signatur und nimmst die _CMDRead() her^^

    Padmak

    Hätte ich es etwas früher gewusst, hätte ich dein script auch noch getestet. Aber ich schaue mir es auf jeden fall mal an :)


    Eins würde mich noch interessieren.

    Wie bekomme ich denn Den betriebssystemname zurück. Ich meine damit z.b. Windows XP x86 oder Windows XP x64. usw. ?

    Und geht es nicht, dass man bei eienr If Anweisung die Abfragen auf mehre Zeilen verteilt, das gleiche gilt für einenString der mit & verknüpft wurde.

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

    If irgendwas = true _
    undnochdasandere = false Then

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

    EndIf

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

    Ich hatte mir gedacht, dass es vielleicht so ähnlich wie in Vb laufen kann mit einem Unterstrich, das funktioniert allerdings nicht.

  • Zu Deinem ersten Problem:

    Spoiler anzeigen
    [autoit]


    @OSBuild
    @OSLang
    @OSServicePack
    @OSType
    @OSVersion

    [/autoit]

    Zum 2.:

    Spoiler anzeigen
    [autoit]


    If irgendwas Then
    Anweisung
    ElseIf iwas anderes Then
    Anweisung
    Else ganz was anderes Then
    Anweisung
    EndIf

    [/autoit]

    Padmak

  • Du kannst sehr wohl If Anweisungen in 2 Zeilen schreiben, Du hast nur die "And" Anweisung vergessen :D

    Spoiler anzeigen
    [autoit]

    $var1 = True
    $var2 = False

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

    If $var1 = true And _
    $var2 = false Then
    MsgBox(0,"",@OSBuild&" "&@OSLang&" "&@OSServicePack&" "&@OSType&" "&@OSVersion)
    EndIf

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)