Batch datei erstellen via BCB6
-
Hi @ all!
Ich habe eine grafische Oberfläche in BCB6 gemacht, nun möchte ich dass wenn zB Button1 geklickt wird folgender Text in eine *.cmd datei geschrieben wird:
@ /
"c:\blab\bla\bla.bla" /bla bla_bla /bla
bla=c:blab\bla
bla %bla% /bla /bla "bla" /bla
%bla%\023 /bla "bla..." /bla
bla %bla%\353 /bla "%systemdrive%\bla\bla\bla.bla" /blaIch habe leider keine Ahnung wie ich das umsetzen kann, vorallem mit den Steuer- und Sonderzeichen und den Absätzen...
Hoffe ihr könnt mir da weiter helfen.
greez
Weedy
-
Hallo
zum Schreiben in Dateien siehe in die BCB_FAQ hier im Forum, in die TOP3 ganz oben.
zu Sonderzeichen : bis auf die Backslash kannst du alles so wie es über Code speichern, die Backslashes selber must du verdoppeln, um die korrekte Escapesequenz zu bekommen.bis bald
akari
-
Hallo
ganz primitiv und schnell kannst Du das Problem so lösen:
Du fügst eine Memokomponente dem Projekt hinzu.bei Deinem ButtonClick - Ereignis schreibst Du dann in der Art :
Memo1->Clear();
Memo1->Lines->Add("c:");
Memo1->Lines->Add("cd windows");
Memo1->Lines->Add("dir/p");Memo1->Lines->SaveToFile("c:\temp.bat");
das spart Dir die Dateiarbeit ist aber auch nicht die eleganteste Lösung
-
Hallo
@Rostfrei : Statt der Memo-Komponente lieber eine TStringList nehmen, wie es in der FAQ auch beschrieben wird. Der Rest stimmt aber.
bis bald
akari
-
Stimmt; ist noch schneller und weniger primitiv, also auch eleganter!
-
thx für die antworten, wie bekomm ich bei der memo methode die anführungszeichen in die datei ?
-
ok habs geraft \" ^^hehe steuerzeichen^^
-
danke nochma für eure hilfe, hat alles wunderbar geklappt, und reicht mir erst ma mit dem Memo, müsst nur noch das memo verstecken, aber das wird schon klappen memo1->hide() oder so denk ich ma...
weedy
-
weedhead87 schrieb:
danke nochma für eure hilfe, hat alles wunderbar geklappt, und reicht mir erst ma mit dem Memo, müsst nur noch das memo verstecken, aber das wird schon klappen memo1->hide() oder so denk ich ma...
Warum so ne Fummellösung mit hide() wenns mit TStringList (wie akari bereits sagte) besser ist?
-
bin anfänger, und habs gern einfach mit dem anderen hab ich mich net auseinander gesetzt, bi erstmal froh das es läuft
-
Hallo
Falls Du es doch nach akaris Art machen willst:
TStringList* myStringList = new TStringList;
myStringList->Add("C:");
myStringList->Add("dir/p");
myStringList->SaveToFile("C:\\test.bat");Gruss Rostfrei[]
-
aber nicht vergessen, nach dem SaveToFile auch wieder aufzuräumen... wir wollen doch keine speicherlecks - das wäre alles andere als elegant ^^
delete myStringList;ich nehme an, du willst die batch danach auch ausführen? das würdest du dann zB mit ShellExecute machen:
ShellExecute(NULL,"open","C:\\test.bat",NULL,"C:\\",SW_SHOWNORMAL);oder wenn keine dos-box während der ausführung angezeigt werden soll:
ShellExecute(NULL,"open","C:\\test.bat",NULL,"C:\\",SW_HIDE);cya
AlgoMan
-
das iss ja heftig hier, echt kollegial wie ihr mir helft, hätt ich so nicht erwartet...thx 4 this
mh ich hab das mit winexec gemacht:
//Memo Inhalt in Datei schreiben
Memo1->Lines->SaveToFile("c:\\temp.cmd");
//temp.cmd aufrufen
WinExec("C:\\temp.cmd",SW_SHOWNORMAL) ;
//10sec Pause
Sleep(10000);
//Neustarten
WinExec("shutdown -r -t 1",SW_SHOWNORMAL) ;
-
WinExec sollte nicht mehr benutzt werden
Siehe stattdessen:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_18.html
oder
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_25.htmlAuch der Shutdown kann unter XP Probleme bringen:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_13.html
-
danke für den vorschlag habs jetzt mal geändert auf:
//Datei aufrufen
ShellExecute(NULL,"open","C:\\test.cmd",NULL,"C:\",SW_HIDE);//10sec Pause
Sleep(10000);//Neustarten
DWORD res=0;
ExitWindowsEx(EWX_FORCE|EWX_REBOOT,res);