CMD nach ausgeführtem Befehl nicht schließen

  • Hallo AutoItler :)

    Hier erstmal der erste Teil vom Script

    [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button2
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]


    Jetzt probiere ich noch durch eine zweite Schleife:

    [autoit]

    Func ()
    For $hSearch = 1 to 3

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

    $sFilepath = FileOpenDialog("Wähle die Datei zum durchsuchen aus!", @DesktopDir, "(*.nsf)")
    If Not @error Then GUICtrlSetData($hFilepath, $sFilepath)

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

    Exit
    EndFunc

    [/autoit]

    Dieses Suchfenster zu öffnen. Dabei kommt aber eine Fehlermeldung und ich habe keine Ahnung wie ich diesen Fehler umgehen kann.

    Ich würde mich über Hilfe freuen(und seid nicht zu hart, ich probiere mich nur nebenbei an Autoit:))

    Mfg Skybor

    2 Mal editiert, zuletzt von skybor1994 (20. Dezember 2011 um 12:16)

  • Fehllt bei deinem 1.Script nicht ein If? oder wozu ist das Endif?
    und beim 2. solltest du vllt. ein Next nach den befehlen machen
    €dit: du solltest der funktion im 2. script auch einen namen geben Z.B. Func blabla()
    so kommt bei mir nur die Fehlermeldung das $hFilepath nicht deklariert ist

    [autoit]

    Func blabla()
    For $hSearch = 1 to 3

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

    $sFilepath = FileOpenDialog("Wähle die Datei zum durchsuchen aus!", @DesktopDir, "(*.nsf)")
    If Not @error Then GUICtrlSetData($hFilepath, $sFilepath)

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

    next
    Exit
    EndFunc

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

    P.S: hoffe ICH habe keine Fehler gemacht :D

  • an dem oberen Teil sollte nichts falsch sein, es sei denn ich habe mehr gekürzt als ich wollteaber das tut nichts zur Sache. :D
    Es geht mir mehr um den unteren Teil, der garnicht funktioniert:/.
    Wenn ich das Script mit einem zweiten while schreibe, dann funktioniert nur der Teil, der am anfang steht. Der andere Teil macht dann garnichts.Deßhalb versuche ich dieses problem mit Func() zu umgehen.

    Tante Edith sagt: was wäre das für ein Name? :D
    oder ist das egal? ?(

  • vllt. postest du mal das ganze Script immoment versteh ich es noch nciht so ganz :D (liegt aber warsch. daran das ich noch nicht so sehr bewandert in Autoit bin )

    €dit: du meinst den Funktionsnamen?

  • [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\
    $asd = GUICreate("asd", 414, 154, 192, 124)
    $hFilepath = GUICtrlCreateInput("Fehlerhafte Datei auswählen", 24, 16, 265, 21)
    $hSearch = GUICtrlCreateButton("Durchsuchen", 304, 16, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("nfixup", 16, 72, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 16, 96, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 16, 120, 97, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 120, 72, 97, 17)
    $Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 120, 96, 97, 17)
    $Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 120, 120, 97, 17)
    $Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 224, 72, 97, 17)
    $Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 224, 96, 97, 17)
    $Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 224, 120, 97, 17)
    $Button2 = GUICtrlCreateButton("Repair", 304, 48, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button2

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

    If GUICtrlRead($Checkbox1) = 1 Then

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

    run('nfixup.exe "$sFilepath"')

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

    EndIf
    EndSwitch
    WEnd
    Func $sFilepath()
    For $hSearch = 1 to 3

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

    $sFilepath = FileOpenDialog("Wähle die Datei zum durchsuchen aus!", @DesktopDir, "(*.nsf)")
    If Not @error Then GUICtrlSetData($hFilepath, $sFilepath)

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

    next
    Exit
    EndFunc

    [/autoit]

    Jetzt müsste nurnoch der untere Teil funktionieren, dann kann ich dsa endlich fertigmachen ;)

  • So das erste was auffällt ist in Zeile 31 das

    [autoit]

    run('nfixup.exe "$sFilepath"')

    [/autoit]


    1. nfixup.exe wird bei mir nicht gefunden.. gibts das überhaupt ? 8|
    2. Variablen werden ohne " "" " geschrieben , auch weiß ich nciht wie man die Variablen bei dem run befehl einbringt
    3.Funktionen haben keine Variablen als namen (Zeile 36)
    4. $hFilepath kommt im script nciht vor also kann es garnicht funktionieren ( Z.40)

  • Sicher gibts den :D Ist ein Befehl von Lotus Notes, aber egal.. bevor ich mich darum kümmere muss das Script erstmal laufen :/
    Klar kommt $sFilepath im Script vor 8|
    Das Problem liegt ja bei Func(). Das ist eigentlich die einzige Fehlermeldung bei mir.

  • Sicher gibts den :D Ist ein Befehl von Lotus Notes, aber egal.. bevor ich mich darum kümmere muss das Script erstmal laufen :/
    Klar kommt $sFilepath im Script vor 8|
    Das Problem liegt ja bei Func(). Das ist eigentlich die einzige Fehlermeldung bei mir.

    €dit €dit €dit ::: ich bin dumm^^ $hFilepath gibts ja :cursing: ich dummkopf ich habe nicht in der GUI geschaut

    Einmal editiert, zuletzt von Silvester (19. Dezember 2011 um 18:51)

  • 8| Komischerweise hat das auch mit $hFilepath geklappt :D
    Aber ich glaube wir reden hier aneinander vorbei :D
    Mir geht es zurzeit wirklich nur um das Func() am Anfang
    Hast du dazu vllt auch noch einen Tipp oder einen Fehler gefunden? :D

  • mach das $ (variablenmerkmal) von der Funktion weg dann "funktioniert es" es passiert nur leider nichts wenn ich den haken bei nfixup mache und button 2 drücke also da ist auch irgendwas faul

  • Hallo skybor1994,

    hier einmal das Skrpt so abgeändert dass es das tun sollte was du möchtest:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\
    $asd = GUICreate("asd", 414, 154, 192, 124)
    $hFilepath = GUICtrlCreateInput("Fehlerhafte Datei auswählen", 24, 16, 265, 21)
    $hSearch = GUICtrlCreateButton("Durchsuchen", 304, 16, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("nfixup", 16, 72, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 16, 96, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 16, 120, 97, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 120, 72, 97, 17)
    $Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 120, 96, 97, 17)
    $Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 120, 120, 97, 17)
    $Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 224, 72, 97, 17)
    $Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 224, 96, 97, 17)
    $Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 224, 120, 97, 17)
    $Button2 = GUICtrlCreateButton("Repair", 304, 48, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hSearch
    _Myfilepath()
    Case $Button2
    If BitAND(GUICtrlRead($Checkbox1),$GUI_CHECKED) Then
    $sCommand = 'nxfixup.exe "'& GUICtrlRead($hFilepath) & '"'
    ConsoleWrite($sCommand & @CRLF) ;Ausgabe nur zu debugzwecken
    Run($sCommand)
    EndIf
    EndSwitch
    WEnd
    Func _myFilepath()
    ;For $hSearch = 1 To 3 ;warum 3 mal? soll der Anwender doch gleich das richtige eigeben

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

    $sFilepath = FileOpenDialog("Wähle die Datei zum durchsuchen aus!", @DesktopDir, "(*.nsf)")
    If Not @error Then GUICtrlSetData($hFilepath, $sFilepath)

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

    ;Next
    ;Exit schädlich da sich da Programm beendet
    EndFunc ;==>$sFilepath

    [/autoit]

    du musst evtl. $sCommand noch den exakten Pfad zu nsfixup angeben,

    mfg autoBert

  • So jetzt läufts...
    Danke schonmal für eure Hilfe :D
    Jetzt nurnoch eine Frage, wo ich schonmal ein Thread aufgemacht hab:
    Wie kann ich cmd auflassen, nachdem es schon ein Befehl ausgeführt hat?
    Also das das Fenster bestenfalls solange offenbleibt bis man eine beliebige taste drückt :D .

  • ZB. So

    [autoit]


    #include <Constants.au3>
    ConsoleWrite(_CMDRead('ipconfig'))

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

    Func _CMDRead($Command)
    Local $CMDRead

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

    $CMD = Run(@ComSpec & " /c " & $Command, @SystemDir, @SW_HIDE, $STDOUT_CHILD)

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

    While 1
    $CMDRead &= StdoutRead($CMD)
    If @error Then ExitLoop
    WEnd
    Return $CMDRead
    EndFunc ;==>_CMDRead

    [/autoit]

    Gruß Marvin

  • Ich geb am besten nochmal mein genaues Script durch :D

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=c:\
    $asd = GUICreate("asd", 414, 154, 192, 124)
    $hFilepath = GUICtrlCreateInput("Fehlerhafte Datei auswählen", 24, 16, 265, 21)
    $hSearch = GUICtrlCreateButton("Durchsuchen", 304, 16, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("nfixup", 16, 72, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 16, 96, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 16, 120, 97, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 120, 72, 97, 17)
    $Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 120, 96, 97, 17)
    $Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 120, 120, 97, 17)
    $Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 224, 72, 97, 17)
    $Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 224, 96, 97, 17)
    $Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 224, 120, 97, 17)
    $Button2 = GUICtrlCreateButton("Repair", 304, 48, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    If GUICtrlRead($Checkbox2) = 1 Then

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

    Run('ping localhost')
    EndIf

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

    EndSwitch
    WEnd

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

    (Das 'ping localhost' is nur ein Beispiel) Aber CMD soll geöffnet bleiben, damit man sozusagen das Ergebnis sieht. :D Ist das irgendwie möglich?

  • Hab dir schnell eine kleine Funktion geschrieben:

    [autoit]

    _runopen('ping localhost')

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

    Func _runopen($run)
    $cmdfile = $run & @CRLF & "pause"
    $file = FileOpen(@TempDir & "runopen.cmd", 2)
    FileWrite($file, $cmdfile)
    FileClose($file)
    Run(@TempDir & "runopen.cmd", @TempDir)
    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    4 Mal editiert, zuletzt von chip (20. Dezember 2011 um 11:30)

  • Spoiler anzeigen
    [autoit]


    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #Region ### START Koda GUI section ### Form=c:\

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

    $asd = GUICreate("asd", 414, 154, 192, 124)
    $hFilepath = GUICtrlCreateInput("Fehlerhafte Datei auswählen", 24, 16, 265, 21)
    $hSearch = GUICtrlCreateButton("Durchsuchen", 304, 16, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("nfixup", 16, 72, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 16, 96, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 16, 120, 97, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 120, 72, 97, 17)
    $Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 120, 96, 97, 17)
    $Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 120, 120, 97, 17)
    $Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 224, 72, 97, 17)
    $Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 224, 96, 97, 17)
    $Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 224, 120, 97, 17)
    $Button2 = GUICtrlCreateButton("Repair", 304, 48, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then ConsoleWrite(_CMDRead('ping 127.0.0.1')) ; beim schließen des Fensters ? wie du willst^^ :D
    Exit

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

    EndSwitch
    WEnd

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

    Func _CMDRead($Command)
    Local $CMDRead
    $CMD = Run(@ComSpec & " /c " & $Command, @SystemDir, @SW_HIDE,$STDOUT_CHILD)
    While 1
    $CMDRead &= StdoutRead($CMD)
    If @error Then ExitLoop
    WEnd
    Return $CMDRead
    EndFunc ;==>_CMDRead

    [/autoit]

    v2 Soll ja nach dem Beenden noch weiterhin angezeigt werden

    Spoiler anzeigen
    [autoit]


    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #Region ### START Koda GUI section ### Form=c:\

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

    $asd = GUICreate("asd", 414, 154, 192, 124)
    $hFilepath = GUICtrlCreateInput("Fehlerhafte Datei auswählen", 24, 16, 265, 21)
    $hSearch = GUICtrlCreateButton("Durchsuchen", 304, 16, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("nfixup", 16, 72, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 16, 96, 97, 17)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 16, 120, 97, 17)
    $Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 120, 72, 97, 17)
    $Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 120, 96, 97, 17)
    $Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 120, 120, 97, 17)
    $Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 224, 72, 97, 17)
    $Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 224, 96, 97, 17)
    $Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 224, 120, 97, 17)
    $Button2 = GUICtrlCreateButton("Repair", 304, 48, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then Run(@ComSpec & " /K " & 'ping 127.0.0.1', @SystemDir)
    Exit
    EndSwitch
    WEnd

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

    beachte , so wie du den Code gepostet hast wird der PING beim SCHLIEßEN! des Scripts ausgeführt.. habe dass mal beibehalten denke mal dass ist gewollt^^

    Gruß Marvin

    Einmal editiert, zuletzt von Protex (20. Dezember 2011 um 11:34)

  • Protex ließ mal was er will ;): "Aber CMD soll geöffnet bleiben"

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hi,

    (Das 'ping localhost' is nur ein Beispiel) Aber CMD soll geöffnet bleiben, damit man sozusagen das Ergebnis sieht. Ist das irgendwie möglich?

    ändere mal diese Zeile ab (/c zu /K)

    [autoit]

    $CMD = Run(@ComSpec & " /K " & $Command, @SystemDir, @SW_show)

    [/autoit]

    Das CMD-Fenster bleibt offen.