Parameters uitlezen met CmdLine in AutoIt

Met $CmdLine leest AutoIt de woorden die je meegeeft bij het starten van een script. Dat is handig als één script meerdere taken moet kunnen doen zonder dat je alles dubbel hoeft te bouwen.

Wat is het probleem?

Soms wil je één script dat normaal kan starten, maar ook een test kan doen of een map kan verwerken. Zonder parameters maak je dan snel meerdere losse scripts. Dat wordt rommelig.

Hoe werkt $CmdLine?

$CmdLine[0] zegt hoeveel woorden je hebt meegegeven. Daarna lees je de echte waarden uit met $CmdLine[1], $CmdLine[2] en zo verder.

  • $CmdLine[0]: aantal meegegeven woorden
  • $CmdLine[1]: eerste keuze, zoals open of test
  • $CmdLine[2]: extra waarde, bijvoorbeeld een pad naar een map

Voorbeeldcode

Hieronder zie je een simpele aanpak met Switch. Zo blijft je script leesbaar.

#include <MsgBoxConstants.au3>

If $CmdLine[0] = 0 Then
    MsgBox($MB_ICONINFORMATION, "Gebruik", "Start dit script met open, test of pad.")
    Exit
EndIf

Switch StringLower($CmdLine[1])
    Case "open"
        MsgBox($MB_ICONINFORMATION, "Actie", "Normale start")

    Case "test"
        MsgBox($MB_ICONINFORMATION, "Actie", "Testmodus")

    Case "pad"
        If $CmdLine[0] < 2 Then
            MsgBox($MB_ICONWARNING, "Let op", "Geef ook een map mee.")
            Exit
        EndIf
        MsgBox($MB_ICONINFORMATION, "Map", "Meegegeven map: " & $CmdLine[2])

    Case Else
        MsgBox($MB_ICONERROR, "Onbekend", "Ik ken deze parameter niet.")
EndSwitch

Wanneer is dit handig?

  • als hetzelfde script soms normaal en soms in testmodus moet draaien
  • als je een map, bestandsnaam of gebruiker wilt meegeven
  • als je een script vanuit Taakplanner of een ander programma start

Veelgemaakte fout

Veel mensen vergeten eerst te controleren of er wel genoeg parameters zijn meegegeven. Dan lees je bijvoorbeeld $CmdLine[2] uit terwijl die niet bestaat. Controleer daarom altijd eerst $CmdLine[0].

Bevers gedachte

Een script met nette parameters voelt meteen slimmer aan. Minder losse bestanden, minder gedoe, en de bever houdt van minder gedoe.