Tipp zum Setzen von Übergabeparametern ($CMDLINE) im SciTE-Editor

  • Viele gehen, falls ein Skript mit Übergabeparametern getestet werden soll, wahrscheinlich wie folgt vor :

    1. das Skript wird kompiliert

    2. die .exe-Datei mit Kommandozeilenparameter per CMD-Konsole oder .cmd-Datei starten

    3. bei Problemen bzw. weiteren Tests zurück auf 1.


    Dies kann auf Dauer etwas lästig werden.

    SciTE bietet aber die Möglichkeit, Parameter zu setzen und Skripte mittels F5 (Go) direkt im Editor laufen zu lassen. Diese Parameter werden $CMDLINE zugewiesen.

    Dazu auf den Menüpunkt [View]->[Parameters] gehen, oder Shift+F8 drücken. Es öffnet sich ein Fenster, in das man 4 Parameter eintragen kann, siehe Grafik :



    Diese Settings gelten für die aktuelle SciTE-Sitzung und alle geöffneten Skripte !

    Nach einem erneuten Start von SciTE müssen sie wieder gesetzt werden !


    Die Beschränkung auf 4 Parameter ist etwas schade - ggf. können unsere LUA Experten wie

    BugFix und Bitnugger da was machen, sofern technisch möglich.

    EDIT :

    Obwohl es ursprünglich ggf. nicht so vorgesehen war, kann man in eine Parameterzeile auch mehrere Parameter eintragen ! Damit lässt sich diese Beschränkung umgehen - siehe Beitrag #2

    (Danke an Bitnugger )


    Quelle : ein Beitrag von water aus dem blauen Forum (wie man sieht, war diese Option auch einigen Pro's nicht bekannt ;) )


    Anmerkung :

    Der Tipp setzt u.U. voraus, dass die 'Vollversion' von SciTE, also SciTE4AutoIt3.exe installiert

    ist, siehe https://www.autoitscript.com/s…-script-editor/downloads/

    Ob es auch mit der eingeschränkten SciTE-Variante aus dem AutoIt-Installer geht, habe ich nicht geprüft (wahrscheinlich schon). Es ist aber, meiner Meinung nach, eh sinnvoll, sich die 'Vollversion' zu installieren da sie deutlich mehr Funktionalitäten bietet.


    Gruß Musashi

  • Die Beschränkung auf 4 Parameter ist etwas schade - ggf. können unsere LUA Experten wie

    BugFix und Bitnugger da was machen, sofern technisch möglich.

    Das ist nicht nötig, denn es können weit mehr Parameter übergeben werden, da du in jedem Eingabefeld mehrere angeben kannst. 8o


    Hier ein Bsp.:

    Code
    1. If $CMDLINE[0] Then
    2. For $i = 1 To $CMDLINE[0] Step 1
    3. ConsoleWrite('$CMDLINE['&$i&'] = ' & $CMDLINE[$i] & @CRLF)
    4. Next
    5. EndIf

    Ausgabe:

    $CMDLINE[1] = /t

    $CMDLINE[2] = 300

    $CMDLINE[3] = /s

    $CMDLINE[4] = 20

    $CMDLINE[5] = /I

    $CMDLINE[6] = --verbose

    $CMDLINE[7] = --usevars

    $CMDLINE[8] = /q

    $CMDLINE[9] = /r

    $CMDLINE[10] = /z

    $CMDLINE[11] = Heute ist Montag!

    $CMDLINE[12] = Ne,

    $CMDLINE[13] = Dienstag!


    PS: Die Gesamtlänge für die Parameterübergabe ist ab Win XP+ auf 8191 Zeichen begrenzt.

  • Wer nicht auf solche Tools zurückgreifen will kann auch einfach selbst $CMDLineRaw und $CMDLine editieren, das sind keine Konstanten.

    Hier muss man allerdings auf die Splittung von Parametern mit Stringliteralen im String und Leerzeichen aufpassen, sonst wirds falsch getrennt.


    Code
    1. $CMDLineRaw = "bla blub asd /a /b 20"
    2. $CMDLine = StringSplit($CMDLineRaw, " ")
    3. For $i = 0 To UBound($CMDLine) - 1
    4. ConsoleWrite("$CMDLine[" & $i & "] = " & $CMDLine[$i] & @CRLF)
    5. Next
  • Zitat von Musashi

    Die Beschränkung auf 4 Parameter ist etwas schade - ggf. können unsere LUA Experten wie

    BugFix und Bitnugger da was machen, sofern technisch möglich.

    Das ist nicht nötig, denn es können weit mehr Parameter übergeben werden, da du in jedem Eingabefeld mehrere angeben kannst. 8o

    Wo Du recht hast, hast Du recht :P. Sieht zwar nicht schön aus, und war von den Machern so wohl auch nicht geplant, aber es funktioniert ;) !

    PS: Die Gesamtlänge für die Parameterübergabe ist ab Win XP+ auf 8191 Zeichen begrenzt.

    PS2 : Die Gesamtlänge VOR Windows XP sind übrigens 2047 Zeichen.

    $CMDLine selbst erlaubt 63 Parameter, wobei es für den Einzelparameter kein Maximum gibt solange die Gesamtlänge nicht überschritten wird.

    Wer nicht auf solche Tools zurückgreifen will kann auch einfach selbst $CMDLineRaw und $CMDLine editieren, das sind keine Konstanten.

    Hier muss man allerdings auf die Splittung von Parametern mit Stringliteralen im String und Leerzeichen aufpassen, sonst wirds falsch getrennt.

    Ja, mittels $CMDLineRaw läßt sich $CMDLine auch im Skript setzen.

    Da das Parameterfenster aber genau zu diesem Zweck in SciTE eingebaut wurde, ist dessen Nutzung i.d.R. einfacher. Dank des Tipps von Bitnugger lassen sich auch mehr als 4 Parameter eintragen.

    Letztlich kann es natürlich jeder so machen, wie es ihm gefällt - es ist ja nur ein Hinweis ;).


    Gruß Musashi

  • $CMDLine selbst erlaubt 63 Parameter

    Hier noch ein Tip aus der Autoit-Hilfe, falls mehr als 63 Parameter benötigt werden...

    C
    1. ; Using AutoIt -> Command Line Parameters
    2. ; Note: A maximum of 63 parameters can be returned by the array $CmdLine[]. If you would like to see the entire commandline string passed to an AutoIt executable, then use $CmdLineRaw for the entire parameter string.
    3. #include <Array.au3>
    4. #include <WinAPIShPath.au3>
    5. ; An alternative to the limitation of $CmdLine[] only being able to return a maximum of 63 parameters.
    6. Local $aCmdLine = _WinAPI_CommandLineToArgv($CmdLineRaw)
    7. _ArrayDisplay($aCmdLine)
  • Nachtrag zu :

    Wer nicht auf solche Tools zurückgreifen will kann auch einfach selbst $CMDLineRaw und $CMDLine editieren, das sind keine Konstanten.

    Hier muss man allerdings auf die Splittung von Parametern mit Stringliteralen im String und Leerzeichen aufpassen, sonst wirds falsch getrennt.


    Code von alpines :

    Code
    1. $CMDLineRaw = 'Text="Hallo Welt"'
    2. $CMDLine = StringSplit($CMDLineRaw, " ")
    3. For $i = 0 To UBound($CMDLine) - 1
    4. ConsoleWrite("$CMDLine[" & $i & "] = " & $CMDLine[$i] & @CRLF)
    5. Next

    ==> Ausgabe :

    $CMDLine[0] = 2 (Anzahl der Werte im Array)

    $CMDLine[1] = text="Hallo

    $CMDLine[2] = Welt"

    Texte mit Leerzeichen werden - trotz Anführungsstriche - auf mehrere Parameter verteilt (das hast Du ja auch angemerkt).


    Gibt man Text="Hallo Welt" in das Parameterfenster ein und startet :

    Code
    1. For $i = 0 To UBound($CMDLine) - 1
    2. ConsoleWrite("$CMDLine[" & $i & "] = " & $CMDLine[$i] & @CRLF)
    3. Next

    ==> Ausgabe :

    $CMDLine[0] = 1 (Anzahl der Werte im Array)

    $CMDLine[1] = Text=Hallo Welt

    Das Parameterfenster (Shift+F8) berücksichtigt Leerzeichen in Anführungsstrichen !


    Gruß Musashi