batch oder cmd datei ausführen via system oder shellexcute



  • Hi,
    ich hab heute versucht eine bat datei in
    ShellExecute(NULL, NULL, "\"C:\\Dokumente und Einstellungen\\Steffen\\Desktop\\SchoolTimer\\config_1.bat\"", NULL, NULL, SW_SHOWNORMAL);
    auszuführen aber ohne erfolg
    wenn ich den letzten unterordner weglasse und die config_1.bat auf den Desktop kopiere dann klappts.

    Hab zurzeit kp was ich falsch mache

    Gruß Steffen

    PS: Mit system() klappts auch irgendwie ned


  • Administrator

    1. Da hat es zuviele Gänsefüsschen.
    2. Sollte man open als zweiten Parameter hinschreiben, sonst könnte das plötzlich unvorhergesehene Probleme erzeugen.
    ::ShellExecute

    Zusammengefasst sollte es also ca. so aussehen:
    ShellExecuteA(NULL, "open", "C:/Dokumente und Einstellungen/Steffen/Desktop/SchoolTimer/config_1.bat", NULL, NULL, SW_SHOW);
    Tipp am Rande: Windows erkennt auch / als Ordnertrenner 😉

    Grüssli



  • klappt ned. Die batch datei manuell funktioniert perfekt aber wenn ichs via c++ probier tut sich nix! Trotzdem danke für den Tipp mit "/"
    Edit: Und wenn ich dem Trenner "/" bei system() versuch kommt
    -->
    Der Befehl "C:/Dokumente" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.

    Hat sonst noch jemand ne Idee?

    Edit_2:
    Wenn ich des auch mit deinem neuen Befehl aufm Desktop oder mit nem anderen Ordner versuch klappt des ohne Probleme! Oder daran das es der aktuelle Ordner is von dem dass Programm startet?
    Kann es vllt. an Dev C++ liegen!?


  • Administrator

    system gibt das Kommando einfach an die Shell weiter. Diese kommt mit dem / nicht klar. ShellExecute behandelt die Sache dagegen intern, also das wird direkt durch den Kernel gejagt 😉

    Naja, das mit dem ShellExecute funktioniert bei mir einwandfrei, auch mit einer Bat-Datei. Hab es gerade mit einer eigenen Bat-Datei auf meinem Desktop in einem Ordner probiert.
    Stimmt bei dir auch der Pfad? Hast du Zugriffsberechtigungen? Oder stimmt was im restlichen Programm nicht?

    Grüssli



  • "C:/Dokumente"
    -> Leerzeichen mag der meistens nicht (8.3 wers noch kennt),
    probiers mal mit "C:/Dokume~1/Steffen/Desktop/SchoolTimer/config_1.bat"



  • Das mit den Leerzeichen würde ich so machen, dann klappts vielleicht auch:

    ShellExecute(NULL, "open", "\"C:/Dokumente und Einstellungen/Steffen/Desktop/SchoolTimer/config_1.bat\"", NULL, NULL, SW_SHOW);



  • ich weiß was der Fehler war. Ich hab die batch datei vorher mit ofstream geschrieben. Und dann hat es nie gefunzt. Aber in den anderen Verzeichnisen wo ich sie mal zum testen reinkopiert hab. Dann hab ich gemerkt das ich die Ofstream datei nicht mit f1.close(); geschlossen hab 😉 Trotzdem danke für eure Hilfe. Stand echt auf'm Schlauch!!!


Anmelden zum Antworten