none
Parameter von Batch an C# werden nicht korrekt übergeben RRS feed

  • Frage

  • Hallo Leute,

    folgende Batchdatei:

    ECHO Es findet keine Ueberpruefung auf Validitaet statt!
    SET /p newItem=Bitte das neu aufzunehmende XML-Tag in valider Form eingeben:
    SET item="%newItem%"
    J:\programme\UpdateTool\UpdateApp.exe FALSE newItemC %item%
    ECHO In der Config wurde der Wert %item% neu hinzugefuegt!

    führt bei folgenden Eingaben:

    Es findet keine Ueberpruefung auf Validitaet statt!
    Bitte das neu aufzunehmende XML-Tag in valider Form eingeben:<Item Membership="XFI" Key="CreatorNameCode" IsPassword="false" IsForUser="false" Description="DMS Name" IsAllowed="false">AMS</Item>
    In der Config wurde der Wert "<Item Membership="XFI" Key="CreatorNameCode" IsPassword="false" IsForUser="false" Description="DMS Name" IsAllowed="false">AMS</Item>" neu hinzugefuegt!
    Drücken Sie eine beliebige Taste . . .

    zu folgenden Logeinträgen in einem C#-Programm

    2019-05-28 21:44:34.0598|DEBUG|UpdateApp.AmsUpdateTool|TKipp:Following parameters have been given calling this application:J:\programme\UpdateTool\UpdateApp.exe
    2019-05-28 21:44:34.0754|DEBUG|UpdateApp.AmsUpdateTool|TKipp:Following parameters have been given calling this application:FALSE
    2019-05-28 21:44:34.0911|DEBUG|UpdateApp.AmsUpdateTool|TKipp:Following parameters have been given calling this application:newItemC
    2019-05-28 21:44:34.0911|DEBUG|UpdateApp.AmsUpdateTool|TKipp:Following parameters have been given calling this application:<Item Membership=XFI Key=CreatorNameCode IsPassword=false IsForUser=false Description=DMS
    2019-05-28 21:44:34.1067|DEBUG|UpdateApp.AmsUpdateTool|TKipp:Following parameters have been given calling this application:Name IsAllowed=false>AMS</Item>

    Was geht da schief? Warum wird der letzte Übergabeparameter in zwei Arrayelemente gesplittet, wo ich ihn doch als Ganzes übergebe? Hier noch der C# Code:

     string[] args = Environment.GetCommandLineArgs();
                    if(args.Length < 2) {
                        _logger.Warn("TKipp:Only {0} param given.That's not enough getting started. Application will be exited!", args.Length);
                        Environment.Exit(-1);
                    }
                    //TKipp/15.05.2015/Verarbeite zusätzliche Anforderungen(Erstellen und Versenden der SQLVersionen per Mail)
                    for(int i = 0 ; i < args.Length ; i++) {
                        _logger.Debug("TKipp:Following parameters have been given calling this application:{0}", args[i]);
                    }

    Dienstag, 28. Mai 2019 19:54

Antworten

  • Hi,
    bei der Eingabe mit "Set /p" wird ein Parsing durchgeführt, was man im Log an den fehlenden Apostrophes erkennen kann. Das Gleichheitszeichen wird als Trenner zwischen Parametername und Parameterwert interpretiert. Und bei Description enthält der Parameterwert ein Leerzeichen, was sich dann als Parametertrennung in den CommandLineArgs niederschlägt.

    Fazit: diese Arbeitsweise mit "Set /p" ist für die geplante Anwendung ungeeignet.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert tklustig Mittwoch, 29. Mai 2019 07:57
    Mittwoch, 29. Mai 2019 04:50