Eigene Shell wie *.cmd erstellen...
-
Hallo Leute, ich hoffe iht könnt mir bei meinem Problem helfen unzwar möchte ich gerne eine Art Batch erstellen wie die *.cmd oder *.bat
Ich habe eine Shell erstellt die eigene Befehle in der Konsole entgegenimmt und diese dann ausführt, jetzt habe ich meine Shell mit der Dateiendung *.xmd registriert.
Hier mein Code für die Eingabe der Befehle:int main(int argc, char* argv[]) { string str; do { //Befehl mit Parameter einlesen getline(cin, str); istringstream cmdline (str); string input; vector<string> params; if(cmdline >> input) { //...In dem Code werden eigene Befehle abgearbeitet und ausgeführt, wie z.B.:
kill winamp.exe shutdown ...Jetzt dachte ich mir wenn ich z.B. in der Datei test.xmd folgendes steht:
exec defrag c: shutdownDieser Inhalt an meine Shell übergeben wird, also an argv[] und dieser Inhlat weiter verarbeitet wird, doch wie bekomme ich den Inhalt wenn ich auf die Datei klicke auf meine Shell übergeben?
Also bei *.cmd klappt das doch auch nur wie?Bitte um Hilfe
-
Ich bitte euch könnt mir helfen und ist es möglich sowas zu realisieren?
-
Schau doch selber mal nach, was in argv[] drinsteht - ich tippe mal auf den Pfad der .xmd-Datei (wenn du sie richtig registriert hast)...
-
Jep - argv[0] wird glaub ich den Aufrufpfad deines Programm enthalten.
argv[1] müsste dann dein Dateiname der XMD-Datei sein.
argc gibt an, wieviele elemente argv hat.Have fun!
-
Hallo Leute, ich bin soweit fertig mit der Registrierung und dem Auslesen der Datei, doch wenn ich in der Datei folgendes stehen habe:
kill winamp.exe...wird kill und winamp.exe als einzelne Befehle ausgeführt.
Hier mein Code zum Einlesen:
int main(int argc, char* argv[]) { if(argc > 1) { string str, file = argv[1]; ifstream ifs(file.c_str()); while(ifs >> str) { cout << str << " " << endl; x = parseCommand(str); if(x==10) return 0; } system("pause");Also alles in einer Zeile soll ein Befehl sein und wenn ich str ausgebe wird jeweils kill und winamp.exe einzelnd ausgegeben. Wahrscheinlich ist die Schleife falsch, könnt ihr mir bitte helfen.
-
nimm doch argv[1] als das kommando und alle weiteren als argumente desselben.
btw: das mit dem 'ifstream' und 'string' ist meiner meinung nach etwas umständlich. nimm doch *argv[...] direkt.
-
is normal - er findet ein leerzeichen darum wird es zu "kill" und "winamp.exe" geteilt
setz es einfach in " schon isses zusammen
"kill winamp.exe" dann wirds auch als ein einzelnes gehandhabt