Laden...

Stapelverarbeitungsdatei richtig starten

Erstellt von IchRoque81 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.542 Views
IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren
Stapelverarbeitungsdatei richtig starten

Hallo zusammen.

Eine (vielleicht) sehr banale Frage, auf die ich leider durch meinen Freund Google und Suche nicht finden konnte.

Ich möchte von meinem Programm aus eine cmd-Datei starten. Dazu folgender Code:


Process pro = new Process("cmd.exe", "/c C:\Neuer Ordner\datei.cmd");
pro.start();

Mein Problem liegt jetzt darin, dass die auszuführende "datei.cmd" einmal in einem Ordner liegt der Leerzeichen beinhaltet und das andere mal nicht. Solange der Ordner keine Leerzeichen beinhaltet, ist das ganze kein Problem.

Kann mich bitte einer von der dicken Leitung schupsen, auf der ich sitze? 😉

~ rock on ~

Gelöschter Account
vor 14 Jahren

so sollte es gehen:

Process pro = new Process("cmd.exe", "/c \"C:\\Neuer Ordner\\datei.cmd\"");
pro.start(); 
IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

Hallo JAck30lena

Danke für die schnelle Antwort. Leider arbeitet das ganze nicht so. Fehlermeldung ist folgende:

Der Befehl "C:\Neuer" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Übrigens hatte ich auch so noch einen kleinen Fehler drin. Deshalb hier der bis jetzt (fast) richtige Code 🙂


Process pro = new Process();
pro.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"C:\\Neuer Ordner\\cmd.exe\"");
pro.Start();

Das "/k" habe ich nur hinzugefügt, damit ich auch die Fehlermeldung sehen kann 😉

PS: Schöne Grüße an meinen ehemaligen Praktikumsbetreuer 😁

~ rock on ~

U
21 Beiträge seit 2009
vor 14 Jahren

ungeprüft:
evntl. tut's


"/k \"C:\\Neuer\ Ordner\\cmd.exe\""

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);
Gelöschter Account
vor 14 Jahren

PS: Schöne Grüße an meinen ehemaligen Praktikumsbetreuer

ach ja.. das waren noch zeiten 😉

versuch mal:

Process pro = new Process();
pro.StartInfo = new ProcessStartInfo("cmd.exe", "/k 'C:\\Neuer Ordner\\cmd.exe'");
pro.Start(); 
IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

@urga:
hm...
Ein "&quot; signalisiert doch eine Escapesequenz. Und ein Leerzeichen ist doch keine Escapesequenz???
Danke für den Vorschlag, aber das wars leider auch nicht 😦

@JAck30lena:
Das hatte ich auch schon versucht. geht aber auch nicht 😦


Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.

PS: ja. damals war die welt noch in ordnung 😉

~ rock on ~

Gelöschter Account
vor 14 Jahren
        private void InitProcess(string processName, string arguments)
        {
            Process temp = new Process();            
            temp.StartInfo.FileName = processName;
            temp.StartInfo.Arguments = arguments;
temp.StartInfo.UseShellExecute = false;
}

wenn du dann als argument:

"/k \"C:\\Neuer Ordner\\cmd.exe\""

übergibst, dann muss es so funktionieren.

ps: nur noch starten dann sollte es gehen 😃

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

okey. jetzt funktioniert es soweit.
nun brauch ich nur noch eine weitere kleinigkeit. parameter mit an die batch-datei übergeben 😄

bei den parametern kann es auch vorkommen, dass leerzeichen enthalten sind. deshalb setzte ich wieder die " und bekomme folgenden fehler wieder:


Der Befehl "C:\Neuer" ist entweder falsch geschrieben oder konnte nicht gefunden werden.


Process pro = new Process();
pro.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"C:\\Neuer Ordner\\datei.cmd\" \"Parameter 1\"");
pro.Start();

~ rock on ~

Gelöschter Account
vor 14 Jahren

nimm die von mir gepostete methode und versuche es mit dieser.

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

aber die methode ist doch auch nicht anders als der code von mir. nur ausgelagert.
hier noch einmal der gesamte code:


        private void button1_Click(object sender, EventArgs e)
        {
            InitProcess("cmd.exe", "/k \"C:\\Neuer Ordner\\datei.cmd\" \"Parameter 1\"");
        }
        private void InitProcess(string processName, string arguments)
        {
            Process temp = new Process();
            temp.StartInfo.FileName = processName;
            temp.StartInfo.Arguments = arguments;
            temp.StartInfo.UseShellExecute = false;
            temp.Start();
        }

fehlermeldung ist aber immer noch die gleiche 🤔

~ rock on ~

Gelöschter Account
vor 14 Jahren

also wenn ich es richtig verstehe, dann möchtest du die konsole aufrufen, welche automatisch diese batch mit parametern aufrufen soll?

wenn ja, dann musst du hier den umweg über die inputstreams gehen. also cmd.exe starten und dann ein inputstring formulieren, welche die datei.cmd mit parametern startet.

edit:
so in etwa

            Process temp = new Process();
            temp.StartInfo.FileName = processName;
            temp.StartInfo.RedirectStandardInput = true;
            temp.StartInfo.UseShellExecute = false;
            temp.Start();

            temp.StandardInput.WriteLine("cd \"C:\\Neuer Ordner\"");
            temp.StandardInput.WriteLine("datei.cmd \"Parameter 1\"");
4.939 Beiträge seit 2008
vor 14 Jahren

Das Problem scheint generell zu sein, daß der "cmd"-Befehl keine Parameter annimmt, sobald der übergebene Befehl in Anführungsstriche steht (habe es selbst in der Eingabeaufforderung ausprobiert) -(.
Eine andere Alternative wäre die Verwendung des "start"-Befehls.

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

Danke noch einmal für eure Hilfe (speziell an JAck30lena)

Die letzte Variante die JAck30lena gepostet hat, würde funktionieren. Jedoch habe ich jetzt die Logik der cmd-Datei in das Programm mit integriert.
Mein Problem ist nämlich, dass ich ein WorkingDirectory setzte, dass ich nicht in der Konsole verändern darf. Deshalb gibt es für mein spezielles Problem, keine passende Lösung, außer dass ich ,wie oben erwähnt, die Logik der Batch-Datei in das Programm mit integriert habe.

Trotzdem danke für den support 😃

~ rock on ~

3.825 Beiträge seit 2006
vor 14 Jahren

Seid Ihr sicher dass man cmd.exe mit einem Befehl als Parameter auf rufen kann ?

Bei mir klappt das nämlich nicht.

Ihr macht das so : cmd.exe datei.cmd

Ich mache das immer so :

cmd.exe /Cdatei.cmd

Probier das mal.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo BerndFfm,

Ihr macht das so : cmd.exe datei.cmd

äh, nö. Hier wurde bei der Übergabe von Parametern an cmd.exe immer /c bzw. /k verwendet.

herbivore