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 ~
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 ~
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);
@urga:
hm...
Ein "" 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 ~
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 😃
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 ~
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 ~
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\"");
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.
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 ~
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
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