CMD Tool bauen

  • Hiho,

    ich würde gerne ein nettes tool für die cmd bauen, bei dem man verschiedene parameter nutzen kann.
    wie das normal geht, hab ich schon gemacht, jedoch hätte ich nun eine besonderheit und würde gerne von euch wissen, wir ihr das umsetzen würdet.

    das programm soll verschiedene schalter haben, als bsp: -s -o -l -m
    hinter den schaltern werden TEILWEISE weitere angaben gemacht: -s 56 -o blubb -l -m

    durch die schalter sind verschiedene befehle zugeordnet, so dass die reihenfolge egal ist.
    wie setzt man das am besten um?

    bis jetzt hab ich es so, dass die parameter immer in der gleichen reihenfolge angegeben sein müssen.

  • und jetzt bitte nochmal für mich.

    Sry weiß net was dur dir unter Schaltern vorstellst mach doch einfach mal nen GUI wie du dirs vorstellst und psote das hier beim rest wird dir geholfen.

    • Offizieller Beitrag

    @ I3iLLiG:

    Zitat

    mach doch einfach mal nen GUI wie du dirs vorstellst


    LOL ==> Es soll ein CMD-Line Tool sein ;)

    sc4ry:
    Beim Start des Programms werden ja alle übergebenen Parameter im Array $CmdLine geführt.
    Du hast nun echte Parameter, die mit '-' beginnen und evtuelle Zusätze zu diesen Parametern, die im Augenblick als eigene, daher falsche Parameter geführt werden.
    Am Einfachsten wird sein, alle Parameter zu einem String zusammenzufügen und anschließend an der Position '-' neu zu splitten:
    übergeben: -s 56 -o blubb -l -m
    als 1 String: -s56-oblubb-l-m
    gesplittet an '-':
    s56
    oblubb
    l
    m

    Jetzt neu aufbereiten: 1. Zeichen ist Parameter, weitere Zeichen sind Zusatz:
    s 56
    o blubb
    l
    m

    • Offizieller Beitrag

    Hi,

    ich hatte da mal was angefangen. Kannst du gern weitermachen

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #cs
    Parameter setzen Mussparameter und optionale Parameter
    Die Mussparameter müssen übergeben werden, ansonsten Fehlermeldung anzeigen
    Standardparameter -version -debug (-? or /? or -help)
    Debug etvl. im Skript mit verschiedenen Stufen (welche Infos wirklich ausgegeben werden sollen)
    Funktionen bereitstellen, die per Dict-Obj. auf die Keys(-Parameter) Value zugreifen können.
    #ce
    Global $mandatoryParameter_A
    Global $optionalParameter_A
    Global $help_A[5] = ['-?', 64, '', '', '']
    Global $version_A[5] = ['-version', 64, '', '', '']
    Global $b_Debug = 0, $i_debugLevel = 0

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

    ;ConsoleWrite($CmdLineRaw & @CRLF)
    ;_setVersion('-version', 64, @ScriptName, 'Version : 1.0')
    ; ConsoleWrite(_setDebug() & @CRLF)
    _setHelpMsg('-?', 64, 'Parameter', 'i and o , optional s and t', 5)
    $re = _setParameter('i', 's|t')
    If Not @error Then
    _ArrayDisplay($re)
    Else
    MsgBox(0, "Return", $re)
    EndIf

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

    Func _setVersion($s_version = '-version', $icon = 64, $s_Title = @ScriptName, $s_Message = 'Version : ', $i_timeout = 10)
    $version_A[0] = $s_version
    $version_A[1] = $icon
    $version_A[2] = $s_Title
    $version_A[3] = $s_Message
    $version_A[4] = $i_timeout
    EndFunc ;==>_setVersion

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

    ; 1)DEBUG, 2)WARN,3)FATAL
    Func _setDebug($opt = True, $i_level = 1)
    If $opt = True Then $b_Debug = True
    If $opt = False Then $b_Debug = False
    If $i_level > 0 And $i_level < 4 Then $i_debugLevel = $i_level
    Return 1
    EndFunc ;==>_setDebug

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

    Func _setParameter($mandatoryParameter_A, $optionalParameter_A = '')
    ; Help parameter found?
    If StringInStr($CmdLineRaw, $help_A[0]) Then
    MsgBox($help_A[1], $help_A[2], $help_A[3], $help_A[4])
    Exit(0)
    EndIf
    ; Version paramter found?
    If StringInStr($CmdLineRaw, $version_A[0]) Then
    MsgBox($version_A[1], $version_A[2], $version_A[3], $version_A[4])
    Exit(0)
    EndIf

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

    ; Ermitteln ist/sind die Muss Parameter drin?
    $mandatoryParameter_A = StringRegExp($mandatoryParameter_A, '[A-Za-z0-9_]', 3)
    ; _ArrayDisplay($mandatoryParameter_A, 'MUSS')
    $optionalParameter_A = StringRegExp($optionalParameter_A, '[A-Za-z0-9_]', 3)
    If IsArray($mandatoryParameter_A) And $CmdLine[0] > 0 Then
    Local $found = 0
    For $i = 0 To UBound($mandatoryParameter_A) - 1
    For $y = 1 To $CmdLine[0]
    If '-' & $mandatoryParameter_A[$i] == $CmdLine[$y] Then $found += 1
    ConsoleWrite($mandatoryParameter_A[$i] & $CmdLine[$y] & @CRLF)
    Next
    Next
    If $found <> UBound($mandatoryParameter_A) Then
    MsgBox($help_A[1], $help_A[2], $help_A[3], $help_A[4])
    Exit(0)
    EndIf
    EndIf

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

    ; Getting all parameter
    Local $parameter_A[1][2]
    If $CmdLine[0] <> 0 Then
    For $i = 1 To $CmdLine[0]
    If StringLeft($CmdLine[$i], 1) = '-' Then
    ReDim $parameter_A[UBound($parameter_A) + 1][2]
    $parameter_A[UBound($parameter_A) - 1][0] = StringTrimLeft($CmdLine[$i], 1)
    ContinueLoop
    EndIf
    $parameter_A[UBound($parameter_A) - 1][1] = $CmdLine[$i]
    Next
    $parameter_A[0][0] = UBound($parameter_A) - 1
    EndIf

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

    If $parameter_A[0][0] > 0 Then
    Return $parameter_A
    Else
    SetError(1, 0, 1)
    Return 0
    EndIf
    EndFunc ;==>_setParameter

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

    Func _setHelpMsg($s_help = '-?', $icon = 64, $s_Title = @ScriptName, $s_Message = '', $i_timeout = 10)
    $help_A[0] = $s_help
    $help_A[1] = $icon
    $help_A[2] = $s_Title
    $help_A[3] = $s_Message
    $help_A[4] = $i_timeout
    EndFunc ;==>_setHelpMsg

    [/autoit]

    Mega

  • Hi,

    sobald Du deiner EXE Parameter (also Schalter) übergibst, befinden diese sich ja im Array $cmdline, wobei $cmdline[0] die Anzahl der Parameter angibt. Einfach:

    [autoit]

    $i_param = _ArraySearch($cmdline, "SCHALTERNAME", 1)
    If $i_param <> -1 Then

    [/autoit]


    Das implementierst Du dann für jeden Schalter. Wird der Schalter nun gefunden, hast Du ja den Index des Schalters und willst dann noch auf zusätzliche Angaben prüfen, also machst Du:

    [autoit]

    $s_action = $cmdline[$i_param]

    [/autoit]


    Bei der ganzen Geschichte muss natürlich noch mittels UBounf($cmdline) bzw. $cmdline[0] überprüft werden, damit Du nicht aus dem Array "läufst"! Du könntest -s damit z.b. N Paremeter hinzufügen, indem du das zweite Beispiel in einer Schleife laufen lässt. (Je nach dem wie Du es aufbaust, musst du auch das mit dem "-" berücksichtigen um Deine Parameter zu unterscheiden, sollte aber kein Problem darstellen!

  • kannst auch mal das testen:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _GetCmdParams($params)
    ; Description:: Makes a 2-dimensional CMDLineArray, where The given Parameters can get values
    ; Parameter(s): $params -> List of Params, seperated with |
    ; Return Value(s): 2Dimensional CMDLINE-Array
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _GetCmdParams($params)
    $paramarr = $CMDLINE
    $params = "|" & $params & "|"
    Local $cmd[$paramarr[0]+1][2] = [[0]]
    Local $newi = 0, $lastwasparam = 0
    For $i = 1 To $paramarr[0]
    $paraminfo = 0
    If StringInStr($params,"|"&$paramarr[$i]&"|",0) Then
    $newi += 1
    $lastwasparam = 1
    ElseIf $lastwasparam = 1 Then
    $lastwasparam = 1
    $paraminfo = 1
    ElseIf $lastwasparam = 0 Then
    $newi += 1
    EndIf
    $cmd[$newi][$paraminfo] = $paramarr[$i]
    Next
    $cmd[0][0] = $newi
    ReDim $cmd[$newi+1][2]
    Return $cmd
    EndFunc

    [/autoit]

    //Edit: Code gefixt. (Falsche Parameterzuordnung)

    Einmal editiert, zuletzt von progandy (6. März 2008 um 16:47)