Datenaustausch zwischen Scripten

  • Hallo zusammen,

    folgendes Problem, ich habe zwei Scripte, eins auf der Festplatte und ein anderes auf einen Usb Stick. Das Script auf der Festplatte checkt ob ein laufwerk hinzugefügt wurde, also zb ein usb stick. Wenn dass der Fall ist, dann startet dass Script von der Festplatte, dass Script vom usb Stick. Soweit funktioniert auch alles. Nun zu meinem Problem, ich möchte den Script auf den Usb Stick eine Variable übergeben, nur lesend. z.B. Dass verzeichnis in dem sich dass Script auf der Platte gerade befindet. Mit consoleWrite stdin usw hab ichs nicht hinbekommen, und mit einer .ini Datei funktioniert es auch nicht, da sich das Script auf der Platte bzw. die .ini Datei nicht immer an der selben Position befinden.

    Auf den usb Stick sollten für diesen zweck auch keine weitere datei hinzukommen, die man leicht editieren könnte, denn ich will den usb Stick quasi als schlüssel hernehmen, um mir eine vorher gesperrte funktion auf der Festplatte freizuschalten...

    vielen dank schonmal

    Einmal editiert, zuletzt von Current (4. März 2010 um 07:06)

  • Du kannst das Skript auf deinem Stick per ShellExecute() mit den gewünschten Parametern staren.
    Die Parameter wertest du dann mit diesen Funktionen aus.

    Spoiler anzeigen
    [autoit]

    Func _GetCmdLine($aArgument, $bArgument = '', $CmdDelim = "/")
    Local $RetCmd = _GetMidleString($CmdLineRaw, $aArgument, ' ')
    If $RetCmd = '' Then $RetCmd = _GetMidleString($CmdLineRaw, $aArgument, ' ' & $CmdDelim)
    If $RetCmd = '' Then $RetCmd = _GetMidleString($CmdLineRaw, $aArgument, '$')
    If $RetCmd = '' Then $RetCmd = _GetMidleString($CmdLineRaw, $aArgument, $bArgument)
    Return StringStripWS($RetCmd, 3)
    EndFunc ;==>_GetCmdLine

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

    Func _GetMidleString($sString, $sStart, $sEnd, $iCase = -1, $iRetType = 0)
    Local $iCaseSence = ''
    If $iCase = -1 Then $iCaseSence = '(?i)'

    Local $aArray = StringRegExp($sString, '(?s)' & $iCaseSence & $sStart & '(.*?)' & $sEnd, 3)
    Local $IsArrayCheck = IsArray($aArray)

    If $IsArrayCheck And $iRetType = 1 Then Return $aArray
    If $IsArrayCheck And $iRetType = 2 Then
    Local $iUbound = UBound($aArray)
    If Not StringInStr($aArray[$iUbound - 1], "Next") Then Return $aArray[$iUbound - 1]
    If ($iUbound - 2) >= 0 Then Return $aArray[$iUbound - 2]
    Return $aArray[$iUbound - 1]
    EndIf

    If $IsArrayCheck Then Return $aArray[0]
    Return SetError(1, 0, "")
    EndFunc ;==>_GetMidleString

    [/autoit]


    Quelle unbekannt.

  • So kompliziert muss es ja nicht sein. Wenn nur ein Parameter übergeben werden soll dann reicht auch

    Run("H:\ScriptaufUSBStick.exe "&@ScriptFullPath)

    und im script aufm stick dann:

    [autoit]


    If $CmdLine[0] = 0 Then Exit (MsgBox(64,"","Script wurde nicht vom Hauptskript aufgerufen") <> 0) ; Keine Parameter
    MsgBox(0,"","Skript befindet sich in "&$CmdLine[1])

    [/autoit]

    $CmdLine ist übrigens eine "vordefinierte" Variable. Die brauchst du also nicht deklarieren - die ist intern.