Entwickler-Ecke

IO, XML und Registry - schreibe in einer *.bat


masterZed - Mo 22.02.10 16:32
Titel: schreibe in einer *.bat
hi,
wenn ich aus einer Textbox in einer *.bat Datei etwas schreibe und dies dann ausführen möchten, geht es leider nicht, da wohl irgendwelche zeichen drin sind die nicht hin gehören.

Hat das etwas mit der formatierung oder encode zu tun?
Hätte jemand eine Beispiel wie so etwas aussehen könnte, damit das ausführbar ist?
Es soll ein skript werden der sich aus den Benutzer eingaben generieren läst.
vielen Dank


danielf - Mo 22.02.10 16:58

Hallo,

wie erzeugst du den die Datei und wie schaut sie mit dem Notepad aus? Ein kleines Beispiel lief bei mir problemlos:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
            string input = "notepad";

            FileInfo tempFile = new FileInfo(Path.GetTempFileName() + ".bat");


            using (StreamWriter writer = new StreamWriter(tempFile.OpenWrite()))
            {
                writer.Write(input);
            }

            Process p = new Process();

            p.StartInfo.FileName = tempFile.FullName;

            p.Start();


Gruß Daniel


JüTho - Mo 22.02.10 16:59

Es ist sehr wahrscheinlich, dass das mit dem Zeichensatz zusammenhängt. Speichere den Text mit einer File.WriteAllText-Überladung mit Encoding und benutze dafür GetEncoding(0) oder GetEncoding(1252) - das sind die wahrscheinlichsten Möglichkeiten.

Gruß Jürgen


masterZed - Di 23.02.10 11:11

Die Datei wird so erzeugt!


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
string filenameout = @"c:\test.bat";
            FileStream fs = new FileStream(filenameout, FileMode.Create, FileAccess.Write, FileShare.ReadWrite );

           
            StreamWriter sw = new StreamWriter(filenameout);
            
            sw.Write("Robocopy " + txtboxQuelle.Text +" \t"+ txtboxziel.Text);
            sw.close();


Im Notpad wird dies richtig angezeigt! und wenn ich es von dort aus als*.bat speichere, dann geht das auch. Nur über den code geht es leider nicht!!!

Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


danielf - Di 23.02.10 11:20

Und wie startest du es? Hast du mal den Code-Snipplet von mir versucht?


masterZed - Di 23.02.10 11:26

gestartet wird das ganze per klick!

Werde dein code teste! in erste Linie wollte ich den Fehler bei mir suchen :)


JüTho - Di 23.02.10 11:58

user profile iconmasterZed hat folgendes geschrieben Zum zitierten Posting springen:
gestartet wird das ganze per klick!

Ach ne. Und in deinem Code steht dann so etwas:

C#-Quelltext
1:
2:
3:
private void myButton_Click(...) {
   startebatch();
}

Oder was? Daniel wollte wissen, mit welchen Befehlen innerhalb des Click-EventHandlers du den Start der bat-Datei steuerst. Jürgen


masterZed - Di 23.02.10 17:32

obs sorry:)

ja sicher...

C#-Quelltext
1:
2:
3:
4:
private void btngen_Click(object sender, EventArgs e)
        {
           Methode();
            }


Moderiert von user profile iconChristian S.: Quote- durch C#-Tags ersetzt


JüTho - Di 23.02.10 18:48

Willst du uns auf den Arm nehmen? Es gibt dafür auch noch andere Formulierungen. Damit sind wir doch keinen Schritt weiter. Was wird denn innerhalb von Methode() gemacht? Das ist übrigens eine sehr ausdrucksvolle Bezeichnung für eine Methode. Jürgen


masterZed - Di 23.02.10 23:43

bitte nicht falsch verstehen!

Die Methode die ausgeführt wird ist oben zu finden.


jaenicke - Mi 24.02.10 00:52

Das heißt du startest dann die Batchdatei manuell und nicht aus dem Programm? Und was passiert dann? Hast du mal die beiden Versionen (wo es funktioniert und deine) mit einem Hexeditor oder so verglichen?

Du könntest auch eine solche Datei einmal anhängen, dann sehen wir ja auch woran es liegt.

Und hast du user profile iconJüThos Tipp mit dem Encoding einmal ausprobiert?


danielf - Mi 24.02.10 12:02

Wo sollen den die Methode oben sein? "Oben" finde ich nur Funktionen zum speichern... bzw die eine von mir mit Prozess.Start().

Hast du das mal so ausprobiert?


masterZed - Mi 24.02.10 19:16

danke für eure Hilfe! Inzwischen geht es. Es lag an zu vielen "\n" zeichen.

naja wieder was dazugelernt!

danke euch.