Fragen zu $CMDLINE[0]

  • dafür musst du im CUI-Modus kompilieren und ConsoleWrite verwenden. (Es funktioniert nur mit .exe-Dateien)

  • Parameter kannst du auch ohne CUI auslesen.

    [autoit]

    If $CMDLINE[0] > 0 Then MsgBox(0,"","Sie Haben "&$CMDLINE[1]&" geschrieben")

    [/autoit]

    CUI ... Consolen User Interface (glaube ich)
    So wirds aktiviert:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit]
  • Wie kompilierst du?
    Mit dem AutoIt3Wrapper? Dann musst du das ans Anfang deines Skripts setzen:

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit]


    Oder verwendest du direkt Aut2Exe?
    Dann Startmenü -> AutoIt v3 -> Compile AutoIt to .exe und die Checkbox Console? anhaken.

    • Offizieller Beitrag

    Hi,

    kompilier dies und teste den Aufruf der exe

    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    If $cmdline[0] > 0 And $cmdline[1] = 'Test' Then
    ConsoleWrite("Test" & @CRLF)
    MsgBox(64, 'info', 'Hallo Welt!')
    Else
    ConsoleWrite("ohne Parameter" & @CRLF)
    MsgBox(64, 'info', 'Du Depp Test ist der Parameter!')
    EndIf

    [/autoit]

    Mega

  • Ja das funktioniert. Danke.

    Aber warum funktioniert es damit nicht?

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #region - CmdlineSelect
    If $CMDLINE[0] Then
    For $i = 1 To $CMDLINE[0]
    Select
    Case $CMDLINE[$i] = '/?'
    MsgBox(64, @ScriptName & ' Help', _
    'Switches are:' & @CRLF _
    & @CRLF & '/a' _
    & @CRLF & @TAB & 'Skript für Parameter /a' _
    & @CRLF & '/b' _
    & @CRLF & @TAB & 'Skript für Parameter /b' _
    & @CRLF & '/c' _
    & @CRLF & @TAB & 'Skript für Parameter /c')


    Case $CMDLINE[$i] = '/a'
    _skript('a')
    Case $CMDLINE[$i] = '/b'
    _skript('b')
    Case $CMDLINE[$i] = '/Test'
    ConsoleWrite("Test")
    ;~ _skript('c')
    Case Else
    MsgBox(0x40000, 'Incorrect switch used', _
    'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
    @CRLF & 'Use /? for the switches available.')
    Exit
    EndSelect
    Next
    EndIf
    #endregion

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

    Func _skript($Param)
    Switch $Param
    Case 'a'
    MsgBox(0, '', 'An das Skript wurde Parameter /a übergeben.')
    Case 'b'
    MsgBox(0, '', 'An das Skript wurde Parameter /b übergeben.')
    Case 'c'
    MsgBox(0, '', 'An das Skript wurde Parameter /c übergeben.')
    EndSwitch
    EndFunc

    [/autoit]
  • Hallo zusammen,

    bei mir funktioniert die Übergabe der Parameter auch reibungslos ohne CUI-Modus.

    Einfaches Testverfahren:

    Datei erstellen mit der Zeile:

    [autoit]

    msgbox(0,"",$cmdline[1])

    [/autoit]


    Diese Datei in eine *.EXE kompilieren.

    Dann einfach im Explorer irgendeine Datei per drag&drop auf die kompilierte *.EXE ziehen.
    Sollte dann im msgboxfenster nicht der Pfad/Dateiname der gedroppten Datei stehen, weiss ich auch nicht weiter....jedenfalls liegts dann m.e. nicht an AutoIt.

    Sollte allerdings die msgbox den pfad/dateinamen anzeigen, dann vermute ich ein Layer-8-Problem oder den berühmten handbooknotreaderror :o)

    ciao
    .andy

    *edit* so wie ich das sehe war die abfrage der parameter wohl nicht das problem....

  • Andy: Im CUI-Modus kann man mit ConsolWrite aber auch in die Konsole schreiben. Dafür muss das Skript aber als .exe kompiliert sein.

    Es geht auch mit Select:
    Als CUI.exe kompilieren:

    [autoit]

    #AutoIt3Wrapper_Change2CUI=y
    If $CMDLINE[0] > 0 Then
    For $i = 1 To $CMDLINE[0]
    Select
    Case $CMDLINE[$i] = "/Test"
    ConsoleWrite("Ausgabe in CMD" & @CRLF)
    EndSelect
    Next
    EndIf

    [/autoit]


    Aufruf:
    cui.exe /Test

  • Zitat

    er meint aber das ergebnis mit cmd dann laden...
    also cmd sendet an autoit und dann EMPFÄNGT der auch was...

    eben. ob du nun per drag&drop parameter übergibst oder per console ist der *.exe völlig schnurz.
    anfangs beschrieb er das problem so, als würde er die parameter nicht übergeben können, bzw so, als kämen die übergebenen parameter nicht im script an.
    was sie aber definitiv doch taten ^^

    .andy

  • Das Script funktioniert das Fenster wird bloß zu schnell geschlossen.

    [autoit]

    Case $CMDLINE[$i] = '/Test'
    ConsoleWrite("Test")
    sleep(1000)

    [/autoit]
  • @ alle
    bin zu langsam^^

    ja, das mit dem schreiben in die console ist mir klar. der fehler lag aber trotzdem nicht an der übergabe der parameter, oder steh ich jetzt völlig auf dem schlauch?

    Zitat

    Also ich habe es jetzt so gemacht aber es funkt nicht:

    [autoit]

    Case $CMDLINE[$i] = '/Hallo'
    ConsoleWrite("Lfgdfgdfgfdgdfgvfdvgefvgfdvg")

    [/autoit]


    Ist nur ein Teil vom Script


    *edit* immer noch zu langsam^^
    die endgültige lösung hatte mit dem problem nichts zu tun, wie so oft auch bei meinen scripten :rolleyes:

  • Alternativ wenn du die Konsolenanwendung über cmd aufrufst schließt er das Fenster nicht und du kannst dir das Sleep sparen.
    Also einfach cmd aufrufen und das was du vorher in der Verknüpfung stehen hattest reinkopiern und Enter

    • Offizieller Beitrag

    Hallo

    Die wohl sauberste möglichkeit ist mit Switch. Gib mal im SciTe cmdlineswitch ein und drücke Leertaste.
    Dann sollte das hier erscheinen:

    Spoiler anzeigen
    [autoit]

    #region - CmdlineSwitch
    If $CMDLINE[0] Then
    For $i = 1 To $CMDLINE[0]
    Switch $CMDLINE[$i]
    Case '/?'
    MsgBox(0x40000, @ScriptName & ' Help', _
    'Switches are:' & @CRLF _
    & @CRLF & '/extract' _
    & @CRLF & @TAB & 'Extract files to current directory' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '')
    Exit
    Case '/extract'
    FileInstall('?', @ScriptDir & '\')
    Exit
    Case '/x'
    Case '/x'
    Case '/x'
    Case '/x'
    Case Else
    MsgBox(0x40000, 'Incorrect switch used', _
    'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
    @CRLF & 'Use /? for the switches available.')
    Exit
    EndSwitch
    Next
    EndIf
    #endregion

    [/autoit]

    Mfg Spider

  • Hast du dir mal seinen Quelltext angekuckt ?
    Das ist ziemlich detailgenau der Code den du gepostet hast. :pinch:

  • Hmm und wie kann ich $CMDLINE[0] benutzen und gleichzeitig eine Gui betreiben?

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    If $CMDLINE[0] > 0 Then MsgBox(0,"","Sie Haben "&$CMDLINE[1]&" geschrieben")
    Local $msg

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

    [/autoit]