- Сообщения
- 8,672
- Репутация
- 2,483
Ниже приведён обработчик для командной строки передаваемой в скрипт, полезен если передаются много аргументов и для каждого нужна отдельная обработка:
Аргументы могут передаваться в следующих форматах:
Данные (Data) могут быть обрамлены в двойные кавычки, но не обязательно, на выходе (при передаче в функцию события) кавычки будут удаляться.
Код:
#Region Example #1
;This is changed only for testing reasons
If $CmdLine[0] = 0 Then $CmdLineRaw = '/File: "C:\File.txt" /Line: "Some_Line"'
_CmdLineSetEvent("File", "", "_Show_CmdLine_Proc", "Call #1")
_CmdLineSetEvent("Line", "", "_Show_CmdLine_Proc", "Call #2")
;Event function
Func _Show_CmdLine_Proc($aArgument, $sParams)
Return MsgBox(64, $sParams, "Command Line: " & @CRLF & $aArgument[0] & " = " & $aArgument[1])
EndFunc
#EndRegion Example #1
#Region Example #2
;This is changed only for testing reasons
If $CmdLine[0] = 0 Then $CmdLineRaw = '-x:400 -y:200'
$iX = _CmdLineSetEvent("x", "100")
$iY = _CmdLineSetEvent("y", "200")
ConsoleWrite($iX & "x" & $iY & @LF)
#EndRegion Example #2
; #FUNCTION# ====================================================================================================
; Name...........: _CmdLineSetEvent
; Description....: Sets an event for passed command line parameters
; Syntax.........: _CmdLineSetEvent($sArguments, $sFuncName, $sParams="")
; Parameters.....: $sArgument - The argument that will be checked and passed to the event function.
; $sDefault - [Optional] Default value to return if command line parameter was not found.
; $sFuncName - [Optional] Event function to call when command line is recieved.
; The function is called minimum with 1 parameter, wich is an array of data, where [0] is the parameter name, and [1] is the value.
; $sParams - [Optional] Additional parameters to pass to the event function.
;
; Return values..: Success - Executes the $sFuncName function and returns it's value.
; Failure - Returns 0 and sets @error as following:
; 1 - Unable to extract the command line argument.
; 2 - Error to call the $sFuncName function.
; Author.........: G.Sandler (a.k.a CreatoR), creator-lab.ucoz.ru, autoit-script.ru
; Modified.......:
; Remarks........:
; Related........:
; Link...........:
; Example........:
; ;This is changed only for testing reasons
; If $CmdLine[0] = 0 Then $CmdLineRaw = '/File "C:\File.txt" /Line "Some_Line"'
; _CmdLineSetEvent("File", "", "_Show_CmdLine_Proc", "Call #1")
; _CmdLineSetEvent("Line", "", "_Show_CmdLine_Proc", "Call #2")
;
; Func _Show_CmdLine_Proc($sArgument, $sParams)
; Return MsgBox(64, $sParams, "Command Line: " & $sArgument)
; EndFunc
; ===============================================================================================================
Func _CmdLineSetEvent($sArgument, $sDefault = "", $sFuncName = "", $sParams = "")
Local $sRegExp, $sArgs, $sRet, $aRet, $sreArgument
Local $iStripQuotes = 1, $sPar = "-/", $sVal = "=:"
$sPar = "[" & StringRegExpReplace($sPar, "([-^\\])", "\\\1") & "]"
$sVal = "[" & StringRegExpReplace($sVal, "([-^\\])", "\\\1") & " ]"
$sreArgument = "\Q" & $sArgument & "\E"
$sRegExp = '(?i)^(?:|.*?\s)' & $sPar & $sreArgument & $sVal & '+(?:$|' & $sPar & '|((?:"[^"]*"|[^"])+?)(?:$|\s' & $sPar & '\w)).*'
$sArgs = StringRegExpReplace($CmdLineRaw, $sRegExp, '\1')
If @extended = 0 Or $sArgs = "" Then
$sArgs = StringRegExpReplace($CmdLineRaw, '(?i).*(' & $sPar & $sreArgument & $sVal & '?).*', '\1')
If @extended = 0 Or $sArgs = "" Then
Return SetError(1, 0, $sDefault)
EndIf
EndIf
If $iStripQuotes Then
$sArgs = StringRegExpReplace($sArgs, '\A"+|"+\z', '')
EndIf
If $sFuncName = "" Then
Return $sArgs
EndIf
Dim $aRet[2] = [$sArgument, $sArgs]
$sRet = Call($sFuncName, $aRet, $sParams)
If @error Then
$sRet = Call($sFuncName, $aRet)
If @error Then
Return SetError(2, 0, 0)
EndIf
EndIf
Return $sRet
EndFunc
Аргументы могут передаваться в следующих форматах:
Код:
-Arg Data
/Arg Data
-Arg: Data
/Arg: Data
-Arg:Data
/Arg:Data
Данные (Data) могут быть обрамлены в двойные кавычки, но не обязательно, на выходе (при передаче в функцию события) кавычки будут удаляться.