Ergebnis der Kommandozeile in neuen Befehl übernehmen

  • Ich hab doch schon ein Beispiel gepostet ........................................

    Zitat
    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)

    [/autoit]
  • Tut mir leid aber ich verstehe die Logik dieser Funktion nicht, daher weiss ich nicht wo ich die Zeilen ...

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)


    ... hinzufügen soll.

    Wenn ich die einfach an das Script hänge sind sie doch wertlos, da ich nur einen Befehlsaufruf durchführe. :?: :?:

  • DAS SIND DEINE 3 KOMMANDOAUFRUFE. DANACH STEHT DIE NUMMER; DIE DU WILLST IN $nummer !!! :!::!::!:
    Die Funktion ruft das Kommando auf und gibt dir das Ergebnis zurück.

  • Das ist mir klar das dies die drei Kommandoaufrufe sind die ich brauche, das habe ich verstanden.
    Was ich nur nicht weiß was ich in die Funktion der MsgBox schreibe, schließlich müßte ja dort nur der letzte Kommandozeilenaufruf rein, da dieser das Ergebnis liefert, aber wenn ich das mache, bekomme ich nur Fehler (Error parsing function call).

    • Offizieller Beitrag

    Weiß auch net, warum. Jetzt geht es wieder so ?(

    Ich glaube das Problem ist eher Release oder Beta Version. EGAL! :D

    Probier mal dies:

    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)

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

    MsgBox(64, 'DOS', _createSerial($nummer))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid);, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

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

    Func _createSerial($str)
    Return StringLeft($str, 8) & '-' & StringMid($str, 9, 4) & '-' & StringMid($str, 14, 4) & '-' & StringMid($str, 19, 4) & '-' & StringRight($str, 12)
    EndFunc ;==>_createSerial

    [/autoit]

    Mega

  • Dank dir Mega, aber da scheint trotzdem noch irgendwo ein Fehler drin zu stecken. Ich erhalte die Meldung, dass die GUID falsch sein, das deutet für mich daraufhin, dass bei einem der Kommandoaufrufe eine Nummer falsch (falsches Format, Länge oder sonstiges) übergeben wird. Wird vielleicht ein Leerzeichen zwischen "... /cg" und der Nummer gesetzt?

    Ich habe jetzt übrigens mal die aktuelle Bata 3.2.11.12 installiert.

    • Offizieller Beitrag

    Vergleich mal wo der Fehler ist

    Spoiler anzeigen
    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    ConsoleWrite($n & @CRLF)
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    ConsoleWrite($n2 & @CRLF)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)
    ConsoleWrite($nummer & @CRLF)
    MsgBox(64, 'DOS', _createSerial($nummer))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid);, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

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

    Func _createSerial($str)
    Return StringLeft($str, 8) & '-' & StringMid($str, 9, 4) & '-' & StringMid($str, 14, 4) & '-' & StringMid($str, 19, 4) & '-' & StringRight($str, 12)
    EndFunc ;==>_createSerial

    [/autoit]

    Mega

  • Das gleiche wie vorher, die gleiche Meldung "Konver-tier-ng i- GUI- ungltig."
    Mehr sehe ich auch nicht.

  • Machs mal so:

    Spoiler anzeigen
    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    ConsoleWrite("Befehrl1: " & $n & @CRLF)
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    ConsoleWrite("Befehrl2: " & $n2 & @CRLF)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)
    ConsoleWrite("Befehrl3: " & $nummer & @CRLF)
    MsgBox(64, 'DOS', _createSerial($nummer))

    [/autoit]


    und sag, bei welchem Befehl der Fehler kommt.

  • "Befehrlx:" wird leider nicht mit ausgegeben, es bleibt bei der alten (nichtssagenden) Fehlermeldung.

  • Bricht das Script nach der Fehlermeldung ab?
    machs mal so:

    Spoiler anzeigen
    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    MsgBox(0,"","Befehrl1: " & $n & @CRLF)
    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    MsgBox(0,"","Befehrl2: " & $n2 & @CRLF)
    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)
    MsgBox(0,"","Befehrl3: " & $nummer & @CRLF)
    MsgBox(64, 'DOS', _createSerial($nummer))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid);, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

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

    Func _createSerial($str)
    Return StringLeft($str, 8) & '-' & StringMid($str, 9, 4) & '-' & StringMid($str, 14, 4) & '-' & StringMid($str, 19, 4) & '-' & StringRight($str, 12)
    EndFunc ;==>_createSerial

    [/autoit]


    Jetzt müsste dastehen, bei welchem Befehl der Fehler kommt.

  • Ok, die Übergabe der ermittelten Nummer von Befehl 1 zu 2 geht schief. Dort kommt jetzt konkret, dass dei GUID-Nummer falsch ist. Die Nummer die nach Schritt 1 angezeigt wird ist an sich korrekt, sie hat auch die richtige Länge. Ich habe das auch mit der Kommandozeile direkt verglichen.

  • Mach dann doch ne MsgBox, was da raus kommt:

    [autoit]

    MsgBox(0,"",'rsm view /tpartition /b /cg' & $n)

    [/autoit]
  • Mach dann doch ne MsgBox, was da raus kommt:

    [autoit]

    MsgBox(0,"",'rsm view /tpartition /b /cg' & $n)

    [/autoit]

    Scheint ein Zeilenumbruch drin zu sein. Die Zahl steht jedenfalls auf einer neuen Zeile.

  • Dann musst du halt halt alles entfernen, was nicht rein soll :) Das Folgende entfernt alle Nicht-Buxhstaben und Nicht-Zahlen

    [autoit]

    StringRegExpReplace($n,"(?i)[^a-z0-9]","")

    [/autoit]
  • Dann musst du halt halt alles entfernen, was nicht rein soll :) Das Folgende entfernt alle Nicht-Buxhstaben und Nicht-Zahlen

    [autoit]

    StringRegExpReplace($n,"(?i)[^a-z0-9]","")

    [/autoit]

    Hmm, das funktioniert auch nicht, die Nummer wird immernoch getrennt von der Befehlszeile.

  • ghet doch??

    Spoiler anzeigen
    [autoit]

    $n = @CRLF & "F738A5BA21974A0589A3A5691BDA951C"
    $n = StringRegExpReplace($n,"(?i)[^a-z0-9]","")
    MsgBox(0, '', 'rsm view /tpartition /b /cg'& $n)

    [/autoit]
  • So, jetzt klappt es wie ich es mir gewünscht hatte. Ich danke Euch für die Hilfe und vor allem für Eure Geduld!!
    Hier das fertige Script, welches ich ohne Eure Hilfe so nicht hinbekommen hätte.

    Spoiler anzeigen
    [autoit]

    $n = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    $n = StringRegExpReplace($n,"(?i)[^a-z0-9]","")

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

    $n2 = _getDOSOutput('rsm view /tpartition /b /cg' & $n)
    $n2 = StringRegExpReplace($n2,"(?i)[^a-z0-9]","")

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

    $nummer = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n2)
    $nummer = StringRegExpReplace($nummer,"(?i)[^a-z0-9]","")

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

    MsgBox(64, 'GUID-name',"GUID-name des Bandes: " & _createSerial($nummer) & @CRLF & @CRLF & "Die ID wurde in die Zwischenablage kopiert.")
    ClipPut(_createSerial($nummer))

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid);, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

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

    Func _createSerial($str)
    Return StringLeft($str, 8) & '-' & StringMid($str, 9, 4) & '-' & StringMid($str, 14, 4) & '-' & StringMid($str, 19, 4) & '-' & StringRight($str, 12)
    EndFunc ;==>_createSerial

    [/autoit]
    • Offizieller Beitrag

    Puh, schwere Geburt.

    So sollte es auch gehen und schöner aussehen:

    Spoiler anzeigen
    [autoit]


    Global $n0 = _getDOSOutput('rsm view /tphysical_media /b /cg178081F3FCB74242907808DC711B1CF1')
    Global $n1 = _getDOSOutput('rsm view /tpartition /b /cg' & $n0)
    Global $n2 = _getDOSOutput('rsm view /tlogical_media /b /cg' & $n1)

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

    ClipPut(_createSerial($n2))
    MsgBox(64, 'GUID-name', "GUID-name des Bandes: " & _createSerial($n2) & @CRLF & @CRLF & "Die ID wurde in die Zwischenablage kopiert.", 10)

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid);, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return StringRegExpReplace($text, "(?i)[^a-z0-9]", "")
    EndFunc ;==>_getDOSOutput

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

    Func _createSerial($str)
    Return StringLeft($str, 8) & '-' & StringMid($str, 9, 4) & '-' & StringMid($str, 14, 4) & '-' & StringMid($str, 19, 4) & '-' & StringRight($str, 12)
    EndFunc ;==>_createSerial

    [/autoit]

    Mega