MSDOSTIP.TXT
Tipps für den Umgang mit MS-DOS 5.0 - 7


   Copyright (C) 01/1994-05/1997 bei Matthias Paul

   Letzte Änderung: 1997-05-01

   Ich übernehme keine Gewähr für die Richtigkeit der Informationen.
   Jegliche Haftung für Schäden etc. ist ausgeschlossen.

   Die Mehrzahl dieser Hinweise bezieht sich auf MS-DOS 6.2x und MS-DOS 7.
   Einige der Bemerkungen gelten auch für andere DOS-Versionen (ab 2.xx+).

  ---------------------------------------------------------------------------

   Überblick:
   ==========

    1. Label in Batchjobs
    2. PATH-Befehl und Variable
    3. Vergleiche in Batchjobs
    4. Spezielle Umgebungsvariablen von MS-DOS
    5. DBLSPACE-Festplattenkompressor-Workaround
    6. Undokumentierter Befehl TRUENAME
    7. Undokumentierter Parameter /MBR von FDISK
    8. Hinweise zu DBLSPACE/DRVSPACE
    9. CONFIG.SYS: Undokumentiertes und Unbekanntes zum Experimentieren
   10. XCOPY/MCOPY von MS-DOS 3.2
   11. Fehlverhalten von MS-DOS XCOPY
   12. EMM386 und PCI-Mainboards
   13. Neue interne Kommandos von MS-DOS 7.0 (Windows95)
   14. Problem mit CALL in MS-DOS COMMAND.COM bei Batchjobs mit Umleitung
   15. Undokumentierte Parameter externer Kommandos
   16. Unveränderbare Volume-Labels mit LABEL

                                                                             
  ---------------------------------------------------------------------------

   1. Label in Batchjobs: [96-09-25]
   =================================

    Der Batchprozessor von MS-DOS 6.2 unterscheidet Labels/Marken nur noch
    anhand der ersten 8 Buchstaben. Bei MS-DOS 5.0 waren offenbar noch 10
    Buchstaben möglich.
    Hatte man vorher längere Labels verwendet, die sich in den ersten 8
    Buchstaben nicht unterschieden, so kann dies nun dazu führen, daß sich
    diese Batchjobs 'aufhängen', weil sie immer wieder die falschen Sprung-
    ziele anspringen und so Endlosschleifen bilden (Abbruch mit <Ctrl>+<c>
    bzw. <Ctrl>+<Break>).
    Deshalb müssen Labels so gekürzt oder modifiziert werden, daß sie
    sich innerhalb einer Batchdatei eindeutig in den den ersten 8 Buchstaben
    unterscheiden!


  ---------------------------------------------------------------------------

   2. PATH-Befehl und Variable: [96-11-29]
   =======================================

    Die Option /E, die mit der Version MS-DOS 6.0 für den Befehl PATH
    eingeführt wurde, wurde mit MS-DOS 6.2 wieder aufgegeben. Die Option
    mußte bei MS-DOS 6.0 gesetzt werden, um die PATH-Einstellung auch im
    Environment (der Umgebung) repräsentiert zu haben. Vor MS-DOS 6.0 war
    dies - genauso wie jetzt wieder - generell der Fall. Daher kann man
    die Einstellung des Befehls PATH also auch über SET Path= und %Path%
    ändern, was besonders dann praktisch ist, wenn man innerhalb der
    AUTOEXEC.BAT die PATH-Liste nicht mit einem Schlag definiert, sondern
    erst nach und nach ergänzt (weil dies weniger Umgebungsplatz für TSRs
    kostet).

    Will man die Maximallänge von PATH überschreiten, so kann man weniger
    wichtige Pfade in APPEND aufnehmen (Verwendung von /E, um %Append% im
    Environment zu repräsentieren, /X:on für erweiterte Funktionalität).
    Mit APPEND /X:off und APPEND /X:on kann nun ein erweiterter Pfad aus-
    und eingeschaltet werden. Allerdings ist dieses Verfahren mit Vorsicht
    zu genießen, da manche Programme mit APPEND nicht sehr gut zurechtkommen
    (das liegt an der *eigentlichen* Funktion dieses Befehls). Außerdem
    schlägt APPEND bei MS-DOS mit unverschämten 9 KByte Basisspeicher zu
    Buche.

    Seit MS-DOS 6.0 gibt es noch eine andere Möglichkeit, die Maximallänge
    von 128 Zeichen in PATH und APPEND zu überschreiten: Wie von DR DOS und
    Novell DOS schon lange bekannt, ist es jetzt auch bei MS-DOS möglich,
    Umgebungsvariablen bereits in CONFIG.SYS zu setzen. Dies geschieht
    genauso wie in AUTOEXEC.BAT:

    SET path=...

    (Zumindest bei DR DOS 6.0, Novell DOS 7 und Caldera OpenDOS können diese
    Zeilen bis zu 255 Zeichen lang sein.)
    Allerdings ist eine Abfrage in CONFIG.SYS in der Form %Path% nicht
    möglich, die Einträge werden gesammelt und erst beim Laden von
    COMMAND.COM aufgebaut (d.h. vor AUTOEXEC.BAT, aber nach CONFIG.SYS).

                                                                             
  ---------------------------------------------------------------------------

   3. Vergleiche in Batchjobs - Bug? (MS-DOS 6.2): [96-09-25]
   ==========================================================

    Anscheinend hat der Batchprozessor in manchen (seltenen) Fällen
    Probleme mit der korrekten Expandierung von Umgebungsvariablen
    (evtl. nur, wenn diese Sonderzeichen enthalten???).

    IF NOT ""=="%var%" GOTO label1

    Wenn die Variable %var% mit bestimmten, nicht leeren Werten belegt
    wurde, wurde trotzdem das label1 nicht angesprungen (Die Variable
    enthielt nur mehrere mit Leerfeldern getrennte Worte). Paradoxerweise
    funktionierte in diesem Fall aber die logisch gleiche Abfrage:

    IF NOT "%var%"=="" GOTO label1

    Allerdings kann man dann den Tip 3 aus BATTIPS.TXT nicht mehr pauschal
    anwenden.


  ---------------------------------------------------------------------------

   4. Spezielle Umgebungsvariablen von MS-DOS: [96-09-25]
   ======================================================

    In den Variablen %DirCMD% (ab MS-DOS 6.0 dokumentiert, aber wohl auch
    schon bei MS-DOS 5.0 vorhanden) und %CopyCMD% (ab MS-DOS 6.2) kann
    jeweils für die Befehle DIR und COPY eine Voreinstellung für Aufruf-
    parameter abgelegt werden, die dann nicht jedesmal angegeben werden
    braucht. Außerdem wertet MS-DOS eine Variable %Temp% für ein Temporär-
    verzeichnis aus. %ComSpec% enthält - wie gewohnt - den Pfad und Namen
    des Kommandoprozessors. (Variablen wie %Prompt%, %Append%, %Path% sind
    wohl allgemein bekannt und brauchen hier nicht weiter erläutert werden.)

    Bei MS-DOS 7 (aus Windows95 alias Chicago) werden auch noch folgende
    Variablen ausgewertet: %CmdLine% (bei COMMAND.COM), und offenbar auch
    noch %Lang% und %LangSpec% (bei einigen externen Kommandos).

    Die Variable %CmdLine% wird schon seit Ewigkeiten von 4DOS/NDOS benutzt,
    ebenfalls um die Längen-Begrenzung der normalen Kommandozeile (die in
    das PSP passen muß) zu umgehen. Offenbar wurde die Variable %CmdLine%
    aber von einigen frühen Beta-Versionen von Windows95/Chicago noch
    etwas anders gehandhabt als bei 4DOS: Dort wurde nur der überschüssige
    Teil der Kommandozeile, der nicht mehr in das PSP paßt, in %CmdLine%
    abgelegt. 4DOS legt jedoch den kompletten Aufruftext in %CmdLine% ab.
    Die ausgelieferte Version von Windows95 ahmt glücklicherweise das
    Verhalten von 4DOS nach.

    Möchte eine Applikation Nutzen aus %CmdLine% ziehen, muß sie deshalb
    beide Varianten - möglichst automatisch - in Betracht ziehen, und da
    es im Rahmen der Verwendung der PSP-Kommandozeile noch eine ganze
    Reihe anderer Besonderheiten gibt, läßt sich dies nicht mehr 100%ig
    sicher lösen:
    Der gleiche Speicherplatz wird teilweise auch vom zweiten FCB und von
    der Default-DTA benutzt; außerdem gibt es große Unterschiede darin,
    wie ein Kommandoprozessor mit Zeilen um 126 Zeichen und länger umgeht:
    Die meisten Kommandoprozessoren setzen hinter die PSP-Kommandozeile
    noch ein ASCII-13, Novell DOS 7 COMMAND.COM und 4DOS/NDOS auch noch
    ein ASCII-0 (wohl nicht bei MS-DOS COMMAND.COM). Dies geschieht aller-
    dings nicht, wenn die Zeile 125 und mehr Zeichen enthält. Bei Aufrufen
    via INSTALL= fehlt wohl auch bei Novelll DOS das ASCII-0. MS-DOS 7
    setzt bei überlangen Kommandozeilen das Längenbyte auf 127 und setzt
    an diese Position ein ASCII-13 (d.h., das ASCII-13 steht dann also eine
    Position zu früh), Borland Pascal 7.00 IDE setzt das ASCII-0 nicht (und
    wohl auch nicht das ASCII-13 an Position 127), dafür aber ein ungültiges
    Längenbyte 128...)


  ---------------------------------------------------------------------------

   5. DOUBLESPACE Online-Festplattenkompressor - Workaround: [96-11-29]
   ====================================================================

    In seltenen Fällen kann es vorkommen, daß DBLSPACE beim *ersten* Ein-
    richten eines komprimierten Laufwerks während des automatisch erfolgten
    Aufrufs der Sicherheitsfunktion SCANDISK abstürzt (nur Booten hilft).
    (Dieses Verhalten wurde auf einem Phoenix-Turbo-XT mit V20+8087,
    1 MByte RAM (!), HGC + VGA, 40 MByte MFM-Platte über Ontrack
    DiskManager beobachtet, aber es ist nicht geklärt, ob das Phänomen
    an dieser speziellen Konfiguration lag.)

    Dies ist nur insofern nicht tragisch, als daß zu diesem Zeitpunkt
    noch keine Daten konvertiert worden sind und die Plattenstruktur
    noch intakt ist.

    Allerdings ist es in diesem Fall normalerweise nicht möglich, DBLSPACE
    einrichten, weil sich der Aufruf von SCANDISK nicht unterdrücken läßt.

    Es gibt aber folgenden Trick:

    a) Man überprüft *vor* dem DBLSPACE-Aufruf mit SCANDISK das betreffende
       Laufwerk. Unbedingt *mit* Oberflächenanalyse, auch wenn's etwas
       dauert! Danach kann man auf einen erneuten Aufruf innerhalb von
       DBLSPACE verzichten; dieser wird nun durch folgenden Trick umgangen:

    b) Man nennt die Datei SCANDISK.EXE in SCANDISK.___ um.

    c) Man nimmt sich irgendein kleines .EXE-Utility, das keine Funktion
       ausführt (oder zumindest 'so gut wie nichts macht'), kaum Speicher
       verbraucht, und mit Errorlevel 0 zu DOS zurückkehrt.

    d) Dieses Progrämmchen, ab nun DUMMY.EXE genannt, nennt man in
       SCANDISK.EXE um.

    e) Man ruft nun DBLSPACE auf und startet die Einrichtung.
       Statt des Aufrufs für SCANDISK.EXE wird nun in Wirklichkeit das
       kurze Utility DUMMY.EXE aufgerufen, das sofort mit der Meldung
       'Alles ok' (ErrorLevel 0) zu DBLSPACE zurückkehrt.
       Danach arbeitet DBLSPACE korrekt weiter.

    f) Nach der Installation von DBLSPACE und dem Kompressionsvorgang kann
       man SCANDISK.EXE wieder in DUMMY.EXE umbenennen und SCANDISK.___
       wieder in SCANDISK.EXE.

    g) Da dieser spezielle Installationsaufruf von DBLSPACE immer nur dann
       geschieht, wenn ein neues komprimiertes Laufwerk installiert wird,
       braucht man sich nur in solchen Fällen um SCANDISK 'kümmern'.


  ---------------------------------------------------------------------------

   6. Undokumentierter Befehl: TRUENAME: [96-11-29]
   ================================================

    MS-DOS 3.0+ (definitiv aber MS-DOS 4.0+) hat einen undokumentierten
    Befehl TRUENAME, der weder in der Hilfe erläutert wird, noch über
    TRUENAME /? seine Funktion preisgibt. TRUENAME wird auch von DR DOS 6.0
    ab Update 1992, Novell DOS 7 Update 4??? und später, Caldera OpenDOS
    sowie 4DOS/NDOS unterstützt.

    Man kann ihm einen unvollständigen Dateinamen (auch mit Wildcards) als
    Parameter übergeben; dieser wird dann entsprechend erweitert (z.B. auf
    das aktuelle Verzeichnis oder auch auf eine ?-Maske) an der Standard-
    Ausgabe ausgegeben. Dabei werden auch JOIN, SUBST, ASSIGN, sowie Netz-
    laufwerke (MAPPINGS) einbezogen (sofern sie TRUENAME-Support haben).
    Mehrfach verschachtelte Substitutionen können aber nicht immer aufge-
    löst werden.

    Dies kann man z.B. in Batchjobs verwenden, um einen Dateinamen explizit
    auszugeben oder um - unter Zuhilfenahme der Umleitungsmöglichkeiten von
    DOS - einen Dateinamen für die folgenden Arbeiten in anderen Verzeich-
    nissen zu fixieren.


  ---------------------------------------------------------------------------

   7. Undokumentierter Parameter von FDISK: [96-06-18]
   ===================================================

    Das Kommando FDISK (MS-DOS 5.0 - 6.22) besitzt einen undokumentierten
    Aufrufparameter, der in Problemfällen mit Festplatten eine große Hilfe
    sein kann (Boot-Sektor defekt, z.B. aufgrund Virusbefall oder bei nagel-
    neuer Boot-Festplatte).

    FDISK /MBR

    schreibt (ohne Rückfrage!!!) einen für das zu dem FDISK-Kommando ge-
    hörige DOS-System gültigen neuen Master-Boot-Record auf die Platte
    (und ermöglicht es damit in Problemfällen, wieder von der Platte zu
    booten). Bitte nur anwenden, wenn das auf der Platte zu bootende
    Betriebssystem mit der aufgerufenen FDISK-DOS-Version übereinstimmt.
    Dies ist fast immer der Fall; es gibt aber Ausnahmen, wo unter Umständen
    kein Erfolg erzielt wird oder sogar der Schaden noch größer wird! Daher
    wirklich nur anwenden, wenn man genau weiß, was man macht!!!
    Achtung: /MBR hebelt auch Boot-Manager wie Linux' LILO oder den OS/2
    Boot-Manager (offenbar auch Windows95 Boot-Manager) und Disk-Manager
    (für große Festplatten unter DOS auf Rechnern mit älteren BIOSen) aus.

    Novell DOS 7 bietet diesen undokumentierten Parameter nicht, dafür aber
    einen offiziellen Menüpunkt, der das Gleiche bewirkt, aber den alten
    MBR sichert und auch wieder zurückschreiben kann.

    MS-DOS 6.22 besitzt auch noch die folgenden undokumentierten Parameter:
    /PRI /EXT /LOG /Q sowie die dokumentierte Option /STATUS. Zumindest
    einige davon könnten verheerende Folgen haben, wenn man sie unachtsam
    aufruft (bisher nicht getestet)!!! Siehe auch Kapitel 15.

    MS-DOS 7 FDISK besitzt einen neuen Parameter /X für eine andere
    Zugriffsmethode auf die Festplatte. Ob dieses FDISK auch noch /MBR
    unterstützt, ist noch nicht geklärt.


  ---------------------------------------------------------------------------

   8. DOUBLESPACE-Hinweis: [96-11-29]
   ==================================

    Ab 03/1994 lieferte Microsoft zu MS-DOS 6.21 das Programm DBLSPACE
    nicht mehr mit aus, weil die Firma einen Prozeß gegen STAC verloren
    hat (es wurden Patentrechte des Algorithmus verletzt...). Allerdings
    ist auch STAC nicht unbeschadet aus dem Kampf hervorgegangen (sie
    hatten eine triviale, allerdings undokumentierte Kompressor-
    Schnittstelle (das sog. Preload-API) von MS-DOS disassembliert und
    in STACKER verwendet, um STACKER auf die gleiche Weise ins System
    einbinden zu können, wie das auch DBLSPACE kann).
    Die um DBLSPACE und einige Bugs erleichterte Version heißt 6.21,
    seit 08/1994 gibt es allerdings eine Version 6.22: Microsoft bekam
    durch einen Handel wieder die Erlaubnis 'DBLSPACE' zu verwenden: das
    Programm heißt jetzt allerdings DRVSPACE (und ist bis auf minimale
    Änderungen mit dem älteren DBLSPACE identisch).


  ---------------------------------------------------------------------------

   9. CONFIG.SYS: Undokumentiertes und Unbekanntes zum Experimentieren:
   =======================================================[97-05-01]===

    In CONFIG.SYS werden neben den bekannten und dokumentierten Direktiven
    auch die folgenden Direktiven akzeptiert (6.2-6.22):

    COMMENT=          Identisch mit REM (beides ab MS-DOS 4.00).
                      Bei Novell DOS 7 nicht vorhanden.

    MULTITRACK=ON|OFF Default-Einstellung ist ON. Mit OFF werden bei beson-
                      deren Kompatibilitätsproblemen Laufwerkszugriffe für
                      jeden Track extra behandelt, was die Sache stark
                      verlangsamt.
                      Welche Probleme damit ausgeräumt werden, ist unbekannt
                      (bisher habe ich solche Probleme noch nie bemerkt). Ab
                      MS-DOS (nicht PC-DOS) 4.00 vorhanden, bei MS-DOS 6.xx
                      wieder undokumentiert.
                      Diese Direktive ist mit der undokumentierten DEBLOCK=
                      Direktive von Novell DOS 7 und Caldera OpenDOS ver-
                      gleichbar, allerdings kann dort zusätzlich noch eine
                      Startadresse für das Disk-De-Blocking angegeben
                      werden, ab der von Single-Sektor auf Multi-Sektor
                      Zugriff umgeschwenkt wird:
                      DEBLOCK=0000 entspricht wohl MULTITRACK=off und
                      DEBLOCK=FFFF entspricht MULTITRACK=on, die dazwischen-
                      liegenden Werte (und die alte Default-Einstellung A000
                      von Novell DOS 7) können mit MS-DOS nicht eingestellt
                      werden.

    NUMLOCK=ON|OFF    Wie bei Novell DOS 7 und Caldera OpenDOS, bei MS-DOS 7
                      dokumentiert.

    SET=              Eingeführt mit MS-DOS 6.0 (wie bei DR DOS 6.0+), bei
                      MS-DOS 7 dokumentiert.
                      Bereits belegte Variablen können mit SET name= auch
                      wieder gelöscht werden (dies funktioniert auch in
                      CONFIG.SYS, allerdings habe ich noch nicht untersucht,
                      wie dies intern verarbeitet wird).
                      Laut MS-DOS 7 CONFIG.TXT kann man eine Auflistung der
                      aktuellen Einstellungen bekommen, indem man SET ein-
                      tippt. Diese Möglichkeit besteht allerdings nur inner-
                      halb von Batchjobs und am Prompt, nicht aber während
                      der Bearbeitung von CONFIG.SYS (wie fälschlicherweise
                      in MS-DOS 7 CONFIG.TXT beschrieben wird).

    Als Default-DOS-Verzeichnis wird nicht nur C:\DOS\, sondern auch
    C:\MSDOS\ akzeptiert (ab MS-DOS 6.0) (was aus Homogenitätsgründen
    vorzuziehen ist, wenn man neben MS-DOS noch andere DOS'e wie
    Caldera OpenDOS (C:\OPENDOS\), Novell DOS 7 (C:\NWDOS\) oder
    DR DOS (C:\DRDOS\) auf der Platte installiert hat). Sollte COMMAND.COM
    nicht gefunden werden, so fragt die Version 6.22 nach einem Pfad zu
    einem gültigen Kommandoprozessor (wie von Novell DOS 7 und Caldera
    OpenDOS her bekannt).


    Der Vollständigkeit halber sei erwähnt, daß sehr alte MS-DOS Versionen
    noch einige andere Direktiven unterstützten:

    SWITCHAR= char            Nur MS-DOS/PC-DOS 2.xx, undokumentiert <'/'>.
                              (Parameter-Einleitungszeichen, heute bei
                              MS-DOS festverdrahtet auf '/', bei Novell DOS
                              und DR DOS aber per API nach wie vor ein-
                              stellbar.)
    AVAILDEV= true | false    Nur MS-DOS/PC-DOS 2.xx, undokumentiert <true>.
                              Gibt an, ob ein zusätzliches \DEV\ beliebigen
                              Gerätetreibern vorangestellt werden muß oder
                              nicht. Dabei bedeutet 'true', daß die Angabe
                              optional ist; bei 'false' muß \DEV\ vorange-
                              stellt werden. Heute ist diese Funktion nicht
                              mehr einstellbar, sondern immer auf laxes
                              Verhalten eingestellt (entspricht 'true').
                              Die Auswertung dieses bool'schen Parameters
                              arbeitete im Gegensatz zu allen anderen
                              (heutigen) derartigen Parametern nicht mit
                              den Argumenten 'ON'|'OFF', sondern untersuchte
                              lediglich den ersten Buchstaben des Arguments:
                              Ein 'F' stand dabei für 'false' und schaltete
                              AVAILDEV= ab.
    STRING[S]=                Nur MS-DOS 3.0, undokumentiert.
                              (Größe einer String-Ära, einer reservierten
                              Struktur im Hauptspeicher, deren Sinn mir bis
                              heute verborgen geblieben ist, siehe SYSVARS.
                              Laut Arne Schäpers hieß diese Direktive
                              STRINGS=, laut Ralf Brown STRING=.)
    IFS=                      Nur MS-DOS 4.xx, wahrscheinlich undokumen-
                              tiert. (Installable File System)
    CPSW=                     Nur MS-DOS 4.xx, wahrscheinlich undokumen-
                              tiert. (Codepage Switching???)


    MS-DOS 7 kennt einige neue Optionen:

    DOS=ENHANCED              Chicago: DOS386.EXE wird geladen.
    DOS=AUTO, NOAUTO          Windows95: Auch in Kombination mit den bis-
                              herigen Schaltern UMB|NOUMB, HIGH|LOW. Mit
                              AUTO (Standard) werden die folgenden Treiber
                              automatisch geladen, auch wenn diese in
                              CONFIG.SYS nicht extra angegeben wurden:
                              HIMEM.SYS, (IFS?)LFSHLP.SYS, DBLBUFF.SYS,
                              SETVER.EXE. Außerdem werden alle der folgenden
                              'HIGH'-Direktiven automatisch angenommen,
                              auch wenn sie nicht explizit mit der Endung
                              '-HIGH' angegeben wurden.
                              Mit NOAUTO werden die obigen Treiber nicht in
                              Eigenregie geladen, was dazu führen kann,
                              daß Windows95 nicht mehr bootet, wenn die
                              Treiber nicht explizit angegeben werden.
                              Evtl. gibt es auch noch einen Wert "SINGLE",
                              der bei DOS angegegeben werden kann.

    BUFFERSHIGH=              Windows95: Wie BUFFERS=, aber hochgeladen
    FCBSHIGH=                 Windows95: Wie FCBS=, aber hochgeladen
    FILESHIGH=                Chicago, Windows95:
                              Wie FILES=, aber hochgeladen
    LASTDRIVEHIGH=            Chicago, Windows95:
                              Wie LASTDRIVE=, aber hochgeladen.

                              Bis einschließlich MS-DOS 6.22 war die bis-
                              herige Default-Einstellung für LASTDRIVE=E für
                              fünf Laufwerke. Mit MS-DOS 7 wurde das Ver-
                              halten von Novell DOS 7 nachempfunden (und
                              sogar noch etwas konsequenter realisiert):
                              Hier sind schon während der Bearbeitung von
                              CONFIG.SYS 26 Laufwerke (A: .. Z:) vorhanden,
                              was eine Reihe Probleme beim Laden von DOS-
                              Umadressierern aus dem Weg räumt. Nur,
                              wenn diese Laufwerke nicht benötigt werden,
                              reduziert MS-DOS die Anzahl der Laufwerke
                              später wieder auf die minimal nötige Anzahl
                              bzw. den Wert von LASTDRIVE= (beim Vorbild
                              Novell DOS gilt dies genauso, allerdings wird
                              aus Kompatibilitätsgründen zunächst eine
                              kleinere Tabelle vorgetäuscht. Wer konnte zu
                              Zeiten von MS-DOS 6 schon ahnen, daß Microsoft
                              mit MS-DOS 7 nun selbst zu diesem Verfahren
                              übergehen würde...)
                              Außerdem kann nun auch bei MS-DOS 7 (undoku-
                              mentiert) eine Angabe LASTDRIVE=1..32 er-
                              folgen, um bis zu 32 Laufwerke bereitzu-
                              stellen. (frühe Ausgaben von Novell DOS 7
                              erlaubten nur 27..32). Und auch die bei
                              Novell DOS längst vorhandenen automatischen
                              Hochlade-Möglichkeiten für die CDS-Tabelle
                              findet sich nun bei MS-DOS 7 wieder...

    STACKSHIGH=               Windows95: Wie STACKS=, aber hochgeladen
    INSTALLHIGH=              Windows95: Wie von DR DOS 6.0/Novell DOS 7
                              bekannt, d.h. wie INSTALL=, nur zum Hochladen.

    ACCDATE=drive1(+|-) [drive2(+|-)] ...
                              Windows95: Mit ACCDATE= wird bei MS-DOS 7 eine
                              Funktion wiederaufgegriffen, die schon bei
                              CP/M-Systemen vorhanden war (ACCESS/CREATE).
                              Für jedes Laufwerk kann mit Plus oder Minus
                              angegeben werden, ob der Last-Access-Timp-
                              stamp mit jedem Zugriff aktualisiert wird
                              oder nicht. Falls ja, so wird bei jedem
                              Datei-/Verzeichniszugriff das aktuelle Datum
                              in einem bisher reservierten Bereich der
                              Verzeichniseinträge eingetragen. Die Datei
                              muß nicht unbedingt modifiziert werden.
                              Dieser Timestamp kollidiert weder mit OS/2
                              Extended Attributes noch mit DR DOS,
                              DR Multiuser DOS, Novell DOS 7, FlexOS,
                              Concurrent DOS Paßwörtern, leider aber mit
                              DR DOS 6.0 Owner-IDs (gibt's bei Novell DOS 7
                              nicht mehr) und Novell DOS 7 DELWATCH, das
                              hier das Original-Datum einer Datei speichert,
                              nachdem sie gelöscht und in die Löschver-
                              folgung aufgenommen wurde. Diese Doppel-
                              nutzung ist recht trickreich und sollte
                              funktionieren, solange die eine Funktion
                              von der anderen 'weiß'. Inwieweit das zu-
                              trifft, habe ich bisher noch nicht überprüft.
                              Allerdings benutzt MS Windows95/MS-DOS 7
                              noch einige andere Einträge im reservierten
                              Bereich, die von DR DOS und Novell DOS in
                              völlig anderer Art und Weise verwendet werden
                              (besonders kritisch dürfte hier die Speicher-
                              ung des Zeitpunktes der Dateierzeugung sein).
                              Näheres ist aber noch nicht untersucht.

    SWITCHES= /E[:nn] mit nn=48..1024
                              Windows95: Wird auf Paragraphen gerundet,
                              für Relokalisierung von EBOIS (EBIOS???).

    Interessante Windows95/MS-DOS 7 MSDOS.SYS [Options] Direktiven:

    LOGO=                     Windows95: undokumentiert (für Konfigurations-
                              datei MSDOS.SYS). Das Einfügen von LOGO=0 in
                              der [Options] Sektion unterdrückt das Start-
                              Logo.
                              Gleichzeitig werden die Meldungen, die die
                              DOS-Treiber während der Bearbeitung der
                              evtl. vorhandenen Dateien CONFIG.SYS und
                              AUTOEXEC.BAT ausgeben, wieder sichtbar.
                              Diese Treiber bilden das DOS-Gerüst, auf dem
                              Windows95 basiert.

    BOOTGUI=                  Windows95: BOOTGUI=0 sorgt in Verbindung mit
                              LOGO=0 dafür, daß Windows95 beim Booten nicht
                              startet, sondern stattdessen sofort der
                              MS-DOS 7 Prompt erscheint. Man kann dann
                              später die grafische Oberfläche von
                              Windows95 - wie von älteren Windows-
                              Versionen gewohnt - mit WIN aufrufen.
                              Hinter der neuen Verpackung ist also
                              doch sehr viel beim alten geblieben...

    Achtung: Die Datei MSDOS.SYS muß aus Kompatibilitätsgründen mit der
    alten gleichnamigen Binärdatei weiterhin größer als 1 KByte sein,
    notfalls muß man also Dummy-Einträge vornehmen.

    COMMAND.COM kennt noch ein paar weitere undokumentierte Parameter,
    deren Funktion aber noch nicht geklärt ist: /F /D


  ---------------------------------------------------------------------------

  10. XCOPY/MCOPY von MS-DOS 3.2:
  ===============================

    Schon reichlich veraltet ist folgender Hinweis:

    Wenn man bei MS-DOS 3.2 (anscheinend nur bei dieser Version) den
    externen Befehl XCOPY in MCOPY umbenennt (bzw. eine so betitelte
    Kopie anfertigt), so fragt der Befehl in kritischen Situationen
    nicht mehr nach, ob es sich bei einer Angabe um eine Datei oder
    ein Verzeichnis handelt, sondern trifft eine automatische Auswahl
    anhand der Schreibweise (damit besteht aber auch eine gewisse Gefahr).

    source=dir           -> target=dir
    source=multiple file -> target=dir
    source=...\          -> target=dir


  ---------------------------------------------------------------------------

   11. Fehlverhalten von MS-DOS 6.xx XCOPY:
   ========================================

    XCOPY verschluckt beim Kopieren ein Reihe Fehlermeldungen, die dazu
    führen können, daß verschiedene Dateien (wo die Probleme auftauchen)
    nicht kopiert werden. Da man als Benutzer keine direkte Rückmeldung
    erhält, sollte man insbesondere in Netzen und unter Multitaskern
    sehr genau die Statistikausgabe kontrollieren, die XCOPY vor seiner
    Beendigung ausgibt.


  ---------------------------------------------------------------------------

   12. EMM386 und PCI-Mainboards:
   ==============================

    Die mit MS-DOS 6.22 ausgelieferte Version von EMM386 (vor 4.48) hat
    verschiedentlich Probleme auf PCI-Rechnern (z.B. in Verbindung mit
    SMC-Ethernet-Karten), aber auch während des LOGIN in ein Netz. Dies
    liegt wohl u.a. daran, daß 32Bit-IO-Zugriffe oberhalb von 400h getrappt
    werden.
    Es gibt bei Microsoft ein Update (das aber in den ersten Versionen
    auch 4.48 hieß, allerdings einen Timestamp von 6.22 aufweist). Außerdem
    soll auch der EMM386-Treiber von MS-DOS 7 (aus MS Windows95) prima mit
    MS-DOS 6.22 zusammenarbeiten und dieses Problem nicht haben.


  ---------------------------------------------------------------------------

   13. Neue interne Kommandos von MS-DOS 7.0 (Windows95): [96-04-02]
   =================================================================

    LFNFOR [[=] ON | OFF]   Aktiviert/Deaktiviert die Verwendung von langen
                            Dateinamen innerhalb von FOR-Befehlen. LFNFOR
                            ohne Parameter zeigt die aktuelle Einstellung
                            an. LFNFOR /H gibt Kurzhilfe aus.
                            Dieser Befehl ist evtl. undokumentiert, jeden-
                            falls wird er derzeit von 4DOS 5.51 und 5.52a
                            noch nicht nachgebildet.

    LOCK/UNLOCK [drive]     Erlaubt den direkten Festplattenzugriff durch
                            Anwendungsprogramme oder sperrt ihn. Dadurch
                            ist es auch unter einem Multitasker möglich,
                            Daten auf einem Laufwerk aus der Sicht eines
                            Tasks 'einzufrieren', so daß z.B. Festplatten-
                            pflegeprogramme arbeiten können. Wird auch von
                            4DOS 5.51(a)+ unterstützt.
                            Wichtig, damit die Stuktur der Long-Filenames
                            nicht zerstört wird, wenn eine nicht kompatible
                            Anwendung direkt auf die Platte zugreift.


  ---------------------------------------------------------------------------

   14. Problem mit CALL in MS-DOS COMMAND.COM bei Batchjobs mit Umleitung:
   ==========================================================[96-08-20]===

    Offenbar existiert ein versteckter Designfehler in der MS-DOS 6.2x
    COMMAND.COM Behandung von Batchjobs, die aus anderen Batchjobs mit
    Ausgabeumleitung aufgerufen werden. Dieser Fehler tritt offenbar nur
    beim Aufruf via CALL auf und macht sich nur dann bemerkbar, wenn auch
    noch SHARE geladen ist. Unter 4DOS/NDOS tritt dieser Fehler nicht auf;
    unter Novell DOS 7 COMMAND.COM tritt dieses Problem nicht auf, es gibt
    aber ein sehr ähnliches Problem (s.u.). Folgender (vereinfachter) Auszug
    aus einem Batchjob soll das Problem verdeutlichen:

     REM Das folgende "CALL" verursacht den späteren Fehler unter MS-DOS:
     @CALL FIND "pattern" pattern.$$$ > %tmp%\result.$$$
     REM Nun tritt bei MS-DOS COMMAND.COM+SHARE ein Share-Fehler auf:
     IF "4"=="%@Eval[2 + 2]%" IF "0"=="%@FileSize[%tmp%\result.$$$,b]%" ...
                                                           ... GOTO no_match
     IF EXIST %tmp%\pattern.$$$ DEL %tmp%\pattern.$$$ > \dev\nul
     IF EXIST %tmp%\result.$$$ COPY %tmp%\result.$$$ %tmp%\pattern.$$$ ...
                                                              ... > \dev\nul
     IF EXIST %tmp%\pattern.$$$ ECHO Suchmuster gefunden!
     :no_match
     IF EXIST %tmp%\pattern.$$$ DEL %tmp%\pattern.$$$ > \dev\nul
     IF EXIST %tmp%\result.$$$ DEL %tmp%\result.$$$ > \dev\nul

    Um zu verhindern, daß der Batchjob nicht fortgeführt wird, wenn das
    externe Kommando FIND über einen Batchjob aufgerufen wird, wurde dem
    FIND ein CALL vorangestellt (CALL kann auch zum Laden von .EXE oder .COM
    Dateien benutzt werden, ist dort allerdings überflüssig). Offenbar
    verheddert sich COMMAND.COM in dieser Situation mit der Ausgabeumleitung
    in die Datei RESULT.$$$, denn der nachfolgende COPY-Befehl meldet eine
    "Sharing violation", d.h. die Datei RESULT.$$$ ist offenbar noch nicht
    geschlossen (obwohl ich kein offenes Datei-Handle finden konnte). Läßt
    man das CALL ein paar Befehle vorher einfach weg (und wird FIND nicht
    per Batchjob aufgerufen), so funktioniert alles wunderbar, aber wegen
    der Möglichkeit, daß ein Batchjob FIND.BAT existiert, ist dies nicht
    immer praktikabel.

    Ein offenbar immer funktionierendes Workaround ist es, statt dem

     CALL

    ein

     %ComSpec% /C

    zu setzen (evtl. auch noch SwitChar einbauen). Vor dem %ComSpec% kann
    man ausnahmsweise auf ein CALL verzichten, da %ComSpec% per se niemals
    auf einen Batchjob, sondern immer auf eine binär ausführbare Datei zeigt
    und damit die Behandlung des Batchjobs nicht unterbrochen wird. Wahr-
    scheinlich funktioniert dieses Workaround deshalb, weil mit %ComSpec% /C
    mit Sicherheit eine neue temporäre Kopie des Kommandoprozessors ge-
    startet wird, und diese beim Beenden wieder den alten Zustand zurück-
    setzt, wohingegen bei CALL i. allg. eine interne Schnittstelle bedient
    wird.

    Achtung: Nach dem "/C" ist kein '@'-Zeichen erlaubt, wie man es sonst
    (in einem Batchjob oder unter 4DOS/NDOS) einem Kommando vielleicht
    voranstellen würde! Das '@'-Zeichen vor dem %ComSpec% ist im Prinzip
    überflüssig, hat aber unter 4DOS/NDOS eine besondere Funktion.

    Ein sehr ähnliches Problem mit Umleitungen, CALL und SHARE existiert
    auch bei Novell DOS COMMAND.COM, wenn auch unter leicht anderen Voraus-
    setzungen (siehe NWDOSTIP.TXT). Glücklicherweise kann man beide Probleme
    auf identische Art und Weise aus dem Weg räumen, so daß hier keine
    weitere Fallunterscheidung zwischen MS-DOS und Novells COMMAND.COM
    notwendig ist.

    Ein vollständiges Beispiel aus der Praxis findet sich im beiliegenden
    Batchjob MEM.BAT.

                                                                             
  ---------------------------------------------------------------------------

   15. Undokumentierte Parameter externer Kommandos: [96-08-20]
   ============================================================

    Diese Rubrik ist brandneu und alles andere als vollständig.
    MS-DOS/PC-DOS besitzt und besaß eine Vielzahl undokumentierter
    Optionen für spezielle Anwendungsfälle.

    Manche dieser Parameter waren nur in bestimmten DOS-Versionen verfügbar
    (z.B. Version 4.xx), manche wurden erst lange nach der Implementation
    dokumentiert, manche sind zwar weiterhin vorhanden, aber mittlerweile
    wieder in der Versenkung der 'Undokumentation' verschwunden.

    In dieser Rubrik werde ich in Zukunft alle undokumentierten Parameter
    auflisten und beschreiben, die mir 'über den Weg kommen', aber da MS-DOS
    *nicht* das von mir favorisierte DOS ist, möchte ich schon jetzt be-
    zweifeln, daß mir hier ähnlich viel einfällt, wie etwa zu Novell DOS...
    Außerdem gibt es auf SimTel einige Sammlungen, die zumindest für die
    älteren DOS-Versionen 2.xx - 5.0 allerhand ans Licht bringen und auf-
    grund des großen Verbreitungsgrades von MS-DOS/PC-DOS existiert sogar
    Literatur, die speziell auf solche Tricks eingeht (was mich eben bewog,
    diese Lücke auch für Novell DOS/DR DOS zu schließen). Auf einige un-
    dokumentierte MS-DOS Parameter wird im Rahmen der Besprechung von
    Novell DOS-Features auch in NWDOSTIP.TXT eingegangen; bisher sind
    diese Informationen noch nicht hierhin übernommen worden.

    ANSI.SYS   dok:   /K /R /X
               undok: /L /S /SCREENSIZE

    ATTRIB.EXE undok: /FILESIZE      existieren seit MS-DOS 4.0+
                      /DATE          existieren seit MS-DOS 4.0+
                      /TIME          existieren seit MS-DOS 4.0+
                      /CODEPAGE /CP  existierten bei MS-DOS 4.0,
                                     aber nicht mehr bei MS-DOS 6.22:
                                     Waren für OS/2 ähnliche Codeseiten-
                                     Unterstützung als erweiterte Attribute
                                     vorgesehen, wurde allerdings meines
                                     Wissens niemals vollständig im Kernel
                                     implementiert. Von Novell DOS 7 und
                                     DR DOS nicht unterstützt, es gibt aber
                                     Alternativen.

    BACKUP.COM undok: /L /HP
                      /P             Packen der Daten (nur mit dem RESTORE
                                     der jeweiligen Version kompatibel)

    DEFRAG.EXE undok: /Q

    DOSKEY.COM undok: /APPEDIT       Diese undokumentierten Optionen wurden
                      /COMMAND       mit MS-DOS 7 (Windows95) eingeführt.
                      /PERMANENT     Daneben kennt DOSKEY noch ein paar
                      /SCRSIZE       weitere neue Optionen, die aber
                      /XHISTORY      dokumentiert sind.

    EDIT.COM   siehe QBASIC.EXE

    FDISK.COM  undok: /MBR           Schreibt neuen Master-Boot-Record
                                     (siehe BATTIPS.TXT)

                      /PRI           (MS-DOS 6.22) ???  Warnung: Ich habe
                      /EXT           (MS-DOS 6.22) ???  diese Optionen bis-
                      /LOG           (MS-DOS 6.22) ???  her nicht unter-
                      /Q             (MS-DOS 6.22) ???  sucht, könnten
                                                        gefährlich sein!!!

               dok:   /STATUS        (MS-DOS 6.22) Gibt eine Übersicht der
                                     Partitionsdaten aus und beendet FDISK
                                     wieder.

    FORMAT.COM undok. und nur für Disketten:
                      /AUTOTEST      "FORMAT in einem Rutsch" ohne lästige
                                     Nachfragen (seit MS-DOS 4.00+, wohl
                                     auch schon früher). Die Frage, ob eine
                                     weitere Diskette formatiert werden
                                     soll, wird übergangen.
                      /BACKUP        Seit MS-DOS 4.00+, wie /AUTOTEST, fragt
                                     allerdings noch nach Labelnamen und ob
                                     weitere Disketten formatiert werden
                                     sollen.
                      /SELECT        Seit MS-DOS 4.00+, wie /AUTOTEST, fragt
                                     allerdings nach dem Label und kehrt
                                     ohne die Frage nach weiteren Disketten
                                     zurück.
                      /H             Nur MS-DOS 3.3: interner Aufruf durch
                                     BACKUP
                                     MS-DOS/PC-DOS/DR DOS 5.0+/Novell DOS 7:
                                     Hilfeschirm

                                     Novell DOS 7 FORMAT bietet eine
                                     ähnliche undokumentierte Option namens
                                     /QUIET an (siehe NWDOSTIP.TXT). Diese
                                     Option entspricht wohl fast 1:1 MS-DOS
                                     /AUTOTEST.

                      /O             Nur altes MS-DOS 2.xx???:
                                     Formatiert mit einem Disketten-Format
                                     für MS-DOS 1.0.

    HELP.COM   siehe QBASIC.EXE

    MEM.EXE    undok. /A             Nur MS-DOS: für Ausgabe der HMA-Nutzung
                                     kollidiert mit dokumentierter DR DOS/
                                     Novell DOS Option /A zur Anzeige der
                                     Gesamt-Info. HMA-Infos erhält man
                                     unter Novell DOS mit /F.

    QBASIC.EXE undok. /EDCOM         Diese beiden undokumentierten Parameter
                      /QHELP         von MS-DOS 6.2x müssen in Großschrift
                                     angegeben werden, ansonsten werden sie
                                     nicht akzeptiert.

                                     /EDCOM wird von EDIT.COM verwendet, das
                                            nichts weiter macht, als den
                                            QBASIC-Editor mit QBASIC /EDCOM
                                            aufzurufen.

                                     /QHELP wird von HELP.COM verwenden, das
                                            nichts weiter macht, als den
                                            QBASIC-Editor mit QBASIC /QHELP
                                            aufzurufen.

    SHARE      undok. /NC            Nur MS-DOS 4.00 und 4.01, lädt den
                                     SHARE-Code nicht, sondern nur den Code
                                     zur Unterstützung großer Laufwerke


  ---------------------------------------------------------------------------

   16. Unveränderbare Volume-Labels mit LABEL: [96-10-23]
   ======================================================

   In seltenen Fällen kann es vorkommen, daß Sie unter MS-DOS/PC-DOS ein
   Disketten-Label nicht mehr verändern können (z.B. mit LABEL). Dies liegt
   daran, daß das Medium vorher mit Hilfsprogrammen der Norton Utilities
   formatiert oder nach einer Fehlerfunktion restauriert wurde. Die Norton
   Utilities verwenden - im Gegensatz zu DOS - als abschließendes Füll-
   zeichen im Volume-Label statt einem Leerfeld (ASCII-32) ein Null-Zeichen
   (ASCII-0). MS-DOS/PC-DOS und einige andere Programmen (etwa ältere Ver-
   sionen von PKZIP) kommen mit solchen Medien nicht zurecht, wenn sie
   einen neuen Namen schreiben soll.

   Abhilfe:

   Medium neu formatieren (nicht mit den Norton Utilities) oder LABEL.COM
   von Novell DOS 7 verwenden, das diese Probleme nicht aufweist.


  ---------------------------------------------------------------------------


Converted to HTML by TXT2HTML (©Thomas Antoni), 19.05.2011, 15:39:16