Verzeichniswechsel in DOS-Shell

  • Zitat von LigH

    Außerdem ist ein Laufwerkswechsel während des Verzeichniswechsels wahrscheinlich auch nicht möglich:

    D:
    cd \TEMP

    Doch, das geht. Mit dem Parameter /D

    Zitat von cd /?

    CD [/D] [Laufwerk:][Pfad]


    Verwenden Sie die /D-Option, um zusätzlich zum Wechseln des Verzeichnisses
    auch das aktuelle Laufwerk zu wechseln.

    Ob das allerdings auch unter den alten Betriebssystemen funktioniert, weiß ich nicht. Löst auch nicht das hier geschilderte Problem.

    Um möglichst weit abwärtskompatibell zu sein, sollte der Weg über die verkürzten Datei-/Verzeichnisnamen (mit Tilde und auf 8 Zeichen begrenzt) gewählt werden.

    Ansonsten kann ich nur die Frage von LigH wiederholen: Welche Programmiersprache?

    Gruß, zisoft

  • Zitat von zisoft

    Ob das allerdings auch unter den alten Betriebssystemen funktioniert, weiß ich nicht.


    Win98SE:

    Code
    Ungültige Option - /D
  • Hallo,

    meine Programmiersprache:
    PowerBasic für DOS 3.5. Eine eingeschränkte Demo einer älteren Version gibt's hier.

    Zitat von LigH

    Was für eine Programmiersprache nutzt du? Hat die keinen internen ChangeDir-Befehl, muss die dafür eine Shell bemühen?

    PowerBasic hat einen chdir-Befehl, der funktioniert allerdings nur mit kurzen Verzeichnisnamen. Nur deshalb bemühe ich die Shell

    Umwandlung Verzeichnisnamen

    Das geht nicht so einfach. ich weiß z.B. nicht, ob "c:\programme\..." "c:\progra~1\..." oder "c:\progra~2\..." heißt.

    zum Laufwerkswechsel
    Es findet kein Verzeichniswechsel in der dos-shell statt. Hier gibt's also kein Problem.

    Zitat

    Würde mich nicht wundern, wenn DOS-Programme nicht in der CMD.EXE gestartet werden, sondern zwischendurch kurzzeitig in einer COMMAND.COM - die gibt's durchaus auch noch unter Windows NT(+)!

    Aha! Wo ist der Unterschied? Meines Wissens nach benutzt PowerBasic für seine shell den Kommandointerpreter, der in der Umgebungsvariable comspec steht.

    Gruß

    akapuma

    Edit:

    Zitat von ich

    Aha! Wo ist der Unterschied?

    Antwort!
    Der Kommandointerpreter cmd.exe beherrschte lange Dateinamen, der Kommandointerpreter command.com nicht.

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • So, jetzt probiere ich mal folgendes:

    - auslesen der Umgebungsvariable comspec, z.B. c:\windows\command.com
    - anstatt command.com wird nun im gleichen Verzeichnis eine cmd.exe gesucht, also z.B. c:\windows\cmd.exe
    - existiert diese cmd.exe, wird diese für den shell-Aufruf benutzt. Wenn nicht, dann nicht

    Dürfte ich die Windows 2000/XP-Nutzer um einen erneuten Test bitten?

    Danke

    akapuma

  • Ergebnis Windows 2000:

    Bist Du wirklich auf dieses prähistorische Zeug angewiesen? Langsam sollte man sich doch wohl von Kompatibilität zu MS-DOS verabschieden können.

    Gruß, zisoft

  • Zitat von zisoft

    Bist Du wirklich auf dieses prähistorische Zeug angewiesen?

    Ja, den ich bin selbst nicht mehr der Jüngste und damit selbst prähistorisch. Bisher hat das DOS-Zeugs auch immer für ein paar kleine Hilfsprogramme ausgereicht, und so tief möchte ich auch nicht (mehr) da einsteigen.

    Im Prinzip ist das Problem ja schon ganz gut eingekreist. Da werd ich wohl nächste Woche meine Mittagspausen am PC von unserer Sekretärin verbringen, die hat nämlich W2000.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Zitat von akapuma

    Dürfte ich die Windows 2000/XP-Nutzer um einen erneuten Test bitten?

    Da wäre dann dies:

    Danach kommt dann das, was Zisoft gepostet hat.

    Zitat von akapuma

    Ja, den ich bin selbst nicht mehr der Jüngste und damit selbst prähistorisch. Bisher hat das DOS-Zeugs auch immer für ein paar kleine Hilfsprogramme ausgereicht, und so tief möchte ich auch nicht (mehr) da einsteigen.

    Könntest ja zum Beispiel eine Delphi Personal nehmen. In der c't war gerade die Delphi 2005 Personal drin. Von der bin ich aber nicht so angetan, die Delphi 7 Personal gefällt mir besser. Die konnte man beim polnischen Borland vor kurzen noch auf Englisch bekommen oder bei der c't das Heft mit der deutschen Version nachbestellen.

  • Wie wäre es denn, Dateien mit dem kompletten Verzeichnis- und Dateinamen zu öffnen, anstatt wirklich das Verzeichnis zu wechseln?

    Wird natürlich die Einschränkungen des DOS-Programmes nicht wirklich beheben, das Problem mit unbekannten Kurznamen-Nummern hast du ja schon selber entdeckt.

    Ich bin mir noch nicht ganz im Klaren darüber, was dein Programm tatsächlich tut; es verändert Texte in der EXE-Datei, richtig? -- Theoretisch sollte GordianKnot sogar schon Skript-Templates unterstützen, auch wenn deren Bedienung irgendwie zu unübersichtlich und komplex geraten ist.

  • Zitat von LigH

    Wie wäre es denn, Dateien mit dem kompletten Verzeichnis- und Dateinamen zu öffnen, anstatt wirklich das Verzeichnis zu wechseln?

    Das geht auch nicht. Da der aktuelle Pfad nicht immer der ist, in der die Datei steht, müßte ich mit dem kompletten Pfad öffnen. Der darf aber keine langen Namen enthalten. Daher möchte ich erst per commandshell in das entsprechende Verzeichnis wechseln und dann ohne Pfadangabe öffnen.

    Zitat von LigH

    Ich bin mir noch nicht ganz im Klaren darüber, was dein Programm tatsächlich tut; es verändert Texte in der EXE-Datei, richtig?

    Nein, es verändert das avs-Skript. Das steht irgendwo beim Film oder beim compcheck im GKnot-Verzeichnis, daher muß ich früher oder später auf jeden Fall das Verzeichnis wechseln.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Ich meinte nicht, den aktuellen Pfad abzufragen, sondern auf Dateien mit komplettem Namen zuzugreifen. Also anstatt

    ChDir("Pfad1")
    OpenFile("Datei1")
    ...
    ChDir("Pfad2")
    OpenFile("Datei2")

    vielleicht direkt

    OpenFile("Pfad1\Datei1")
    ...
    OpenFile("Pfad2\Datei2")

  • Zitat von akapuma

    Nein, es verändert das avs-Skript. Das steht irgendwo beim Film oder beim compcheck im GKnot-Verzeichnis, daher muß ich früher oder später auf jeden Fall das Verzeichnis wechseln.

    Kannst Du nicht ohne Verzeichniswechsel auf das Script zugreifen?

  • Zitat von akapuma

    Dürfte ich die Windows 2000/XP-Nutzer um einen erneuten Test bitten?

    Wenns nicht schon zu spät ist:
    WindowsXP Pro SP1:

  • Zitat von LigH

    Ich meinte nicht, den aktuellen Pfad abzufragen, sondern auf Dateien mit komplettem Namen zuzugreifen.....

    vielleicht direkt

    OpenFile("Pfad1\Datei1")

    Nein, das geht leider nicht. "Pfad1" bekomme ich per Parameter direkt von GKnot im Long-Format, und das kann ich auch nicht zum Öffnen der Datei nehmen.

    Zitat von Garf

    Kannst Du nicht ohne Verzeichniswechsel auf das Script zugreifen?

    Siehe oben. Ich hatte die Hoffnung, das Verzeichnis in einer Shell wechseln zu können. Ohne Verzeichniswechsel müßte ich den vollen Pfad in 8.3-Schreibweise angeben.

    Ich habe heute mal etwas an einem W2000-PC probiert:
    - Erzeugt mein Programm eine DOS-Shell mit command.com, muß ich 8.3-Namen verwenden. Die hab ich aber nicht.
    - Erzeugt mein Programm eine DOS-Shell mit cmd.exe, kann ich auch lange Namen verwenden. Dann kann ich problemlos mit langen Namen das Verzeichnis wechseln. Wenn ich die Shell aber dann beende, ist wieder das alte Verzeichnis "da". Das war das Problem beim letzten Test.

    Es gibt also nur eine Lösung: ich muß lange in kurze Namen umwandeln. Vielleicht findet google was.

    Gruß

    akapuma

    Wer weiß, wovon er redet, kann es sich leisten, sich verständlich auszudrücken.
    Besucht auch meine Homepage: http://akapuma.info

  • Von MS-DOS-Programmen aus ist es schwer, auf die Windows-Funktionen zuzugreifen, die kurze Dateinamen aus langen Dateinamen zurückgeben. Insbesondere, weil es zwei gibt: Eine Funktionengruppe für Windows 9x/ME, und eine Funktionengruppe für Windows 2K/XP.

    Hättest du einen Windows-Compiler, hättest du das Problem nicht. Mit einem DOS-Compiler kannst du es nahezu vergessen...

  • Hallo,

    könnte bitte jemand der Tester das anhängede Programm testen? Es muß weiterhin der Ordner "c:\testordner1\testordner2" existieren.

    Google hat nämlich ergeben, daß der "attrib"-Befehl zum Umrechnen von long=>short benutzt werden kann.

    Gruß

    akapuma

  • Hallo,

    auf der Herstellerseite meines Dos-Compilers https://localhost/www.powerbasic.com gibt's eine Library, mit der einige Befehle mit long-filename-support zur Verfügung stehen. Wie immer geht's bei WIN98. Kann das bitte nochmal jemand testen? Es muß weiterhin das Verzeichnis "c:\testordner1\testordner2" existieren. Ich hoffe, ich werde nicht lästig.

    Danke

    akapuma

  • Zitat von akapuma

    Ich hoffe, ich werde nicht lästig.

    keineswegs

    Windows XP Pro SP1:

  • Zitat von LigH

    Außerdem ist ein Laufwerkswechsel während des Verzeichniswechsels wahrscheinlich auch nicht möglich:


    Also:

    Code
    c:\>cd D:\Ordner


    hat zur Folge dass auf LW D: in das Verzeichnis Ordner gewechselt wird, die Konsole bleibt aber auf C:.


    Zitat von matthiasb

    Hab WinXP Pro:
    Wenn Ihr mal die Autovervollständigung ausprobiert (TAB) dann ergänzt die Konsole das auf erste die Option (ohne Backslash am Ende)

    Ähm, nein. Wenn in dem Verzeichnis ein weiteres Verzeichnis ist, wird das angehängt, Beispiel:

    Es exisitiert: C:\Ordner\NochEinOrdner

    Code
    C:\>cd Ordner\


    Ein Druck auf Tab bringt:

    Code
    C:\>cd Ordner\NochEinOrdner

    Wenn ich allerdings

    Code
    C:\>cd Ordner\NochEinOrdner\


    eingebe und Tab drücke passiert gar nichts.

    "Diejenigen, die grundlegende Freiheiten aufgeben würden, um geringe vorübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit."
    Benjamin Franklin (1706-1790)

    Meine Erfahrungen in der Open Source-Welt: blog.bugie.de

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!