Parameterübergabe via cmdline - Text in Variable wird in einzelne Parameter aufgeteilt

  • Hallo Gemeinde,

    ich möchte an mein Proggi 4 Variablen aus VBA heraus übergeben, als da wären cfgtext, Rechnername, uuid, sn.
    In der cfgtext befindet sich mehrzeiliger formatierter Text, in den anderen jeweils nur ein Wort/Wert.

    Das Problem: der Inhalt der cfgtext wird in einzelne Indizes gespeichert, sodass nicht 4 Indizes sondern 27 existieren.
    Kann man also eine mit formatiertem Text gefüllte Variable nicht an Autoit übergeben und wenn doch was mache ich falsch?

    So erstelle ich die Variable in VBA:

    Cfgtext = Rechnername & Rechnp & Label & vbCrLf & "CPU: " & Me!cfgcpu & "RAM: " & Me!cfgram & vbCrLf & "Drive: " & Me!cfgdrive & vbCrLf & "GPU: " & Me!cfggrafik & "; WWAN: " & Me!cfgwwan & "; WIFI: " & Me!cfgwifi & "; Touch: " & cfgtouch & "; S/N: " & SN

    das ist der Inhalt(aus Datenschutzgründen etwas gekürzt) der cfgtext(Debug-Anzeige in VBA):

    HP-Z2Leihstellung

    CPU: Intel Core i7-12700KRAM: 2 x 16GB

    Drive: MTFDKBA1T0TFH-1BC1AABHA 1TB

    GPU: NVIDIA T400 2GB; Intel UHD Graphics 770; WWAN: 0; WIFI: 0; Touch: 0; S/N: CZC

    das ist das resultierende cmdline-Array:

    Row|Col 0

    [0]|27

    [1]|HP-Z2LeihstellungCPU:

    [2]|Intel

    [3]|Core

    [4]|i7-12700KRAM:

    [5]|2

    [6]|x

    [7]|16GBDrive:

    [8]|MTFDKBA1T0TFH-1BC1AABHA

    [9]|1TBGPU:

    [10]|NVIDIA

    [11]|T400

    [12]|2GB;

    [13]|Intel

    [14]|UHD

    [15]|Graphics

    [16]|770;

    [17]|WWAN:

    [18]|0;

    [19]|WIFI:

    [20]|0;

    [21]|Touch:

    [22]|0;

    [23]|S/N:

    [24]|CZC2

    [25]|HP-Z2

    [26]|E16D50

    [27]|CZC

  • Blöde Frage: Wäre es nicht einfacher, deinen zu Übergebenen Text (alle 4 Zeilen) als zusammenhängenden einzeiler als einzigen Parameter zu übergeben und in dem Programm das dann aufzudröseln (wenn dies nicht auch schon in der VBA benötigt wird)? Also: deinprogramm.exe "deinTextkomplett in Anführungsstrichen"

    Ansonsten lass am besten Sonderzeichen in den Bezeichnern weg (!) also:

    AutoIt
    ;Möglichkeit 1 (Einzelparameterübergabe):
    ;Übergabe:   /PCName "HP-Z2LeihstellungCPU" /CPU "Intel Core i7-12700K" /RAM "2 x 16GB" /Drive "MTFDKBA1T0TFH-1BC1AABHA 1TB" /GPU "NVIDIA T400 2GB; Intel UHD Graphics 770" /WWAN "0" /WIFI "0" /TOUCH "0" /SN "CZC"
    
    ;Aufbau in AutoIt wäre so, müsstest du dann für VBA umschreiben:
    $Parameter = '/PCName "' & $PCName & '" /CPU " & $CPU & '" /RAM "' & $RAM & '" /Drive "' & $Drive & '" /GPU"' & $GPU & '" /WWAN "' & $WWAN & '" /WIFI " & $WIFI & '" /TOUCH "' & $Touch & '" /SN "' & $SN & '"'
    AutoIt
    ;Möglichkeit 2 (Komplettübergabe):
    ;Übergabe:   "HP-Z2Leihstellung CPU: Intel Core i7-12700KRAM: 2 x 16GB Drive: MTFDKBA1T0TFH-1BC1AABHA 1TB GPU: NVIDIA T400 2GB; Intel UHD Graphics 770 WWAN: 0 WIFI: 0 Touch: 0 S/N: CZC"
    
    ;Aufbau in AutoIt wäre so, müsstest du dann für VBA umschreiben:
    $Parameter = "HP-Z2Leihstellung CPU: Intel Core i7-12700KRAM: 2 x 16GB Drive: MTFDKBA1T0TFH-1BC1AABHA 1TB GPU: NVIDIA T400 2GB; Intel UHD Graphics 770 WWAN: 0 WIFI: 0 Touch: 0 S/N: CZC"
    
    Und diesen String musst du dann in AutoIt bearbeiten und ins Array packen oder was du sonst damit vor hast.

    2 Mal editiert, zuletzt von Moombas (3. Juni 2022 um 08:36)

  • Hallo Moombas und Bugfix,

    vielen lieben Dank für eure Denkanstöße. Ich habe das Prob also so gelöst:

    VBA:
    ...
    strQuote = Chr$(34)
    Cfgtext = strQuote & vbTab & Rechnername... & strQuote

    Durch die Variable strQuote ist der Inhalt in Anführungszeichen gesetzt. :party:

  • Du übergibst es also nun als einen ganzen Parameter und nicht mehr als einzelne.

    Anstatt dem strQuote, hättest du auch mit '"' arbeiten können.