Verzeichniss wechseln



  • Hallo,

    ich hab da mal ein Problem 🤡
    Ich möchte innerhalb ein C Proggis das Verz. wechseln. Das ganze klappt ja auch mit chdir ganz gut.
    Leider wird aber nach dem verlassen meines Programms wieder in das Verzeichniss vor dem Prog. start gewechselt.
    Wie kann ich das unterbinden.
    Ich möchte gerne nach verlassen in dem chdir Verz. stehen

    Danke und Gruß

    Chris



  • der Grund warum Die Eingabeaufforderung (comand.com) nicht im
    Eingestellten Verzeichnis ist, weil diese Eingabeaufforderung der übergordnete
    Prozess zu dem aufgerufenen Programm ist mit der aktuellen
    Verzeichniseinstellung!

    Wenn das so einfach mit Verzeichnisswechsel wäre dann würde das aufgerufene
    Programm ja den Ast absägen auf dem es sizt.

    Sowas wollte schonmal jemand oder einige machen hier im Forum
    und das geht nur über Umwege:

    - entweder ueber richtige Prozesskomunikation untereinander
    (Verzeichniswechselprogramm <--> comand.com) dann ist aber die Frage
    wie weit beherrscht das der Kommandointerpreter (comand.com)
    den der ist ja je nach OS noch ein altes DOS - Programm
    wie das bei WIN 2000 oder XP ist vermag ich nicht zu sagen
    welche Funktionalitäten deren Kommandointerpreter besitzt

    - die Gleichgesinnten die das auch wollten sind noch in ne
    andere Richtung gegangen, da muss man sich aber auch mit
    Stabelverarbeitungsdateien sog. Batch - Dateien
    auskennen!
    ich kann Dir die Richtung (Idee) nur grob vorgeben

    Dein Programm macht eine Eingabeabfrage: Verzeichnis?
    dann erstellt (generiert) sich das Programm mit
    den entsprechenden Befehlen und dem Verzeichnis?
    die entsprechende Batchfile
    Deine exe. sprich Dein programm beendet und die Batchfile arbeitet
    weiter -> ala Verzeichniswechsel -> und die Datei (*.bat) muss
    sich dann noch selbst löschen

    das war jetzt nur ganz grob genauer kann ich es nicht wiedergeben mfg 🙂 😉
    P.S. benutz doch mal FAQ und die Suche ich glaub das gibts dort noch



  • Herausgekommen sind 2 Batchdateien und das C - Programm
    welches die Abfrage macht wohin man wechseln will bei mir funzt es
    aber die besagten Batchfiles bleiben erhalten!

    1. ich brauche bei meiner Variante eine Batchfile die das C - programm
    (Verzeichniswechselprogramm) startet!
    Merke wird aus einer Batch - File eine EXE oder ähn. gestartet
    wartet der Kommandointerpreter bis das aufgerufenen Programm
    mit irgendeinen Rückgabe wert terminiert
    (siehe C - Code: int main(...) { ...; return 0;} )

    das kann man in Batchdateien mit dem Statment:
    if errorlevel "irgendend ne Zahl" DOSbefehl tun

    siehe jetzt den Quelltext dieser Batchfile:

    cls
    Verzeichniswechsel.exe
    if errorlevel 0 change.bat
    

    2. Die Verzeichniswechsel.exe generiert eine Batchdatei mit dem Namen
    change.bat konnte diese Datei erstellt werden terminiert
    Verzeichniswechsel.exe mit dem Rückgabewert 0
    was in der auslösenden Batchdatei mit dem if errorlevel 0 überprüft
    wird, trifft diese Bedingung zu kann die Batchfile die Batchfile
    change.bat ausführen und der Verzeichniswechsel gelingt

    Code des C - Programm

    #include <stdio.h>
    //---------------------------------------------------------------------------
    #define MAXSIGNS 8192 /* Achtung das das kann ne Stolperfalle fuer das
                             Programm sein je nach dem wie lang die Verzeichnis
                             eingabe wird */
    
    int main(void)
    {
         char data[MAXSIGNS];
         const char *fname = "change.bat";
         FILE *fp = NULL;
    
         if( (fp=fopen(fname,"w")) == NULL ) return -1;
    
         printf("In welches Directory? ");
         scanf("%s", data); getchar();
         fprintf(fp,"cls\n");
         fprintf(fp,"cd %s\ncls", data);
         fclose(fp);
    
         return 0;
    }
    

    Ach ja die EXE und die Batch (*.bat) sollten im selben
    Verzeichnis stehen!!! Und due rufst das C - Proggi immer
    indirekt ueber die Batchfile auf welche den "ERRORLEVEL" prüft
    um darüber die generierte "change.bat" auszulösen!!

    mfg sclearscreen 😉 🙂


Anmelden zum Antworten