Entwickler-Ecke

Windows API - Batch Befehle direkt per CreateProcess aufrufen


daywalker0086 - Do 01.07.21 11:49
Titel: Batch Befehle direkt per CreateProcess aufrufen
Hallo Leute,
sicher nur ein Klacks für einige. Ich steh auf dem Schlauch.
Ich habe eine Batch Datei, möchte die Befehle aber direkt aus Delphi ausführen damit ich die Batch Datei nicht mit ablegen muss.
Dies sollte ja einfach mit

Delphi-Quelltext
1:
CreateProcess(nil, PChar('cmd.exe /c'+commandline) ...                    

gehen.
Aber irgendwie weis ich nicht wie ich die Parameter genau in den Commandline String übergeben muss.
In der Batch steht folgendes drin:

Quelltext
1:
2:
3:
cd %cd%/Testprogramme
git fetch --all
git reset --hard origin/master


Aber dieser String funktioniert nicht:

Delphi-Quelltext
1:
('"cd %cd%\Testprogramme \n git fetch --all \n git reset --hard origin/master"');                    


Wie muss der denn formatiert sein damit die Zeichen genau so übergeben werden?

Grüße Christian


Th69 - Do 01.07.21 12:42

Die Newline-Zeichen sind hier falsch. Dafür gibt es die Sonderzeichen &&, & sowie ||, s. 2 Ways To Run Multiple Commands In CMD [https://www.itechtics.com/run-multiple-commands/] (etwas runterscrollen zu "Run Multiple Commands Through &, &&, and || sign").


daywalker0086 - Do 01.07.21 13:23

Danke für die Antwort aber schon alleine das

Quelltext
1:
cd %cd%/Testprogramme                    

wird anscheinend nicht richtig übermittelt. das kommt "das System kann den angegebenen Pfad nicht finden"

das mit dem %cd% ist wohl noch nicht richtig.

Moderiert von user profile iconTh69: Code-Tags hinzugefügt


Th69 - Do 01.07.21 14:33

Hatte mir schon gedacht, daß diese Frage als nächstes kommt.
Bei einer Batch-Datei werden die Environment-Variablen automatisch ersetzt. Vom Programm aus mußt du das selber machen: GetEnvironmentVariable [http://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.GetEnvironmentVariable]