SWSUBST(1G)

NAME
swsubst - CDS Manipulator

SYNOPSIS
swsubst { option | kommando } [ argumente ] Erlaubte optionen sind: /h, /?, /#, /!, /a, /f, /k, /t, /_, /d, /x=??, /n und /o=#. Erlaubte kommandos sind: /m, /c, /j, /u, /q, /s, /r, /l und /w. Einer der folgenden Namen ndert die Standardeinstellungen von swsubst: join, subst, mkdir, chdir, query, swap, which, -join, -mkdir, -chdir, -query, -swap, drvlist, mcblist und -which.

DESCRIPTION
swsubst manipuliert die CDS (Current Directory Structure), nahezu jede Information innerhalb der CDS ist verfgbar. Durch Umbennen oder Kopieren des Programms swsubst.exe nach einem der oben genannten Dateinamen wird automatisch ein Kommando als erste Option eingefgt, z.B. ist "query /a c:+net" gleich "swsubst /q /a c:+net". Lediglich join und subst haben eine zustzliche Bedeutung, indem swsubst die Restriktionen fr Konformitt mit den gleichnamigen DOS Standardprogrammen auferlegt werden. Unntige Optionen oder Optionen ohne Bedeutung fr das jeweilige Kommando werden ignoriert. Ein Pfad kann logisch und physisch spezifiert werden. Physische Laufwerksbuchstaben bezeichnen das Laufwerk, welches DOS whrend des Bootvorgangs dem Buchstaben zuordnete. Logische Laufwerksbuchstaben bezeichnen die Laufwerke so, wie sie normalerweise auf der Kommandozeile verfgbar sind, z.B. nach dem Kommando "SUBST C: E:EEDOS" verweist der logische Laufwerksbuchstabe C: auf das physische Laufwerk E:, d.h. wenn der DOS Prompt "C:>" sagt, ist tatschlich der originale Pfad "E:EEDOS" gemeint. Das originale Laufwerk C: ist nicht lnger verfgbar. Um diese Grenze zu durchbrechen, kennzeichnet ein fhrender Bindestrich einen physischen Pfad. Nach "SUBST D: C: logisch Laufwerk D: nach dem physischen Pfad "E:EEDOS whrend nach "SWSUBST D: -C:URCE" zeigt. Achtung: Ist ein physischer Pfad nicht vollstndig angegeben, wird er bzgl. des aktuellen logischen Pfads vervollstndigt. Die Laufwerksspezifikation ist ebenfalls erweitert:
An Stellen, die lediglich eine Laufwerksspezifikation erwarten, kann ebenso ein einzelner Buchstabe, wie ein relativer oder vollstndiger Pfad stehen.
Desweiteren ist es mglich ein Laufwerk zu spezifizieren, indem nach dem Namen des Treibers oder der Volumenkennzeichnung gesucht wird. Treibernamen sind mittels ":*:" verfgbar, wobei "*" fr den maximal 8-stelligen Namen steht. Da ein und derselbe Treiber mehrere Laufwerke verwalten kann, darf mittels ":#:*:" dem Namen eine Zahl vorangestellt werden. Die Nummerierung beginnt bei Null. Achtung: Nicht alle Treiber haben einen Namen!
Die Suche ber Volumenkennzeichen wird mittels "::*:" bzw. ":-:*:" aktiviert, wobei "*" fr das gesuchte Kennzeichen steht. Der optionale Bindestrich weist swsubst an, whrend der Suche bestehende SUBST- und JOIN-Beziehungen zu lsen.
Die Suche beginnt mit Laufwerk A:. Nicht reagierende Laufwerke werden ignoriert.
Die Namen werden ohne Beachtung der Gro- und Kleinschreibung verglichen. Desweiteren mu der tatschliche Name lediglich mit der angegebenden Zeichenkette beginnen. Bspw.: ":1:stac:os" entspricht dem Pfad " mit "STAC" beginnt.
"-:-:hd_c:\foord "O Merke: Der Bindestrich innerhalb der Doppelpunkte ":-:" steht fr: "ermittele den physischen Laufwerksbuchstaben", whrend der Bindestrich vor dem ersten Doppelpunkt fr "interpretiere die folgende Laufwerksbezeichnung als physisch" steht.

OPTIONS

spezielle Namen
    join: Beschrnkt swsubst auf die Mglichkeiten des Standardprogramms JOIN. Siehe die Hilfeseite fr JOIN.
    subst: Beschrnkt swsubst auf die Mglichkeiten des Standardprogramms SUBST. Siehe die Hilfeseite fr SUBST.
    mkdir und -mkdir fgt das /m Kommando ein.
    chdir und -chdir fgt das /c Kommando ein.
    query and -query fgt das /q Kommando ein.
    swap und -swap fgt das /s Kommando ein.
    which und -which fgt das /w Kommando ein.
    drvlist fgt das /r Kommando ein.
    mcblist fgt das /l Kommando ein.
    -join fgt das /j Kommando ein.
    Jeder andere Name verwendet das /u Kommando.

/? und /h
    Zeigt einen kleinen Hilfebildschirm an.

/#  Nach der CDS Tabelle wird die Statistik der geJOINten Laufwerke ausgegeben. Es werden zwei Zahlen ausgegeben, die eine wird aus der CDS Tabelle berechnet, die andere wird aus einem internen DOS Datenbereich gelesen. Sollten sich beide voneinander unterscheiden, kann es sein, da das System nicht korrekt arbeitet.
    Wird diese Option ein zweites Mal angegeben, wird der Effekt der vorherigen und von /! aufgehoben.

/!  Diese Option wirkt wie /#. Zustzlich wird der interne Datenbereich abgeglichen, falls sich beide Zahlen voneinander unterscheiden.
    Wird diese Option ein zweites Mal angegeben, wird die zweite ignoriert.

/a  Nachdem das Kommando fehlerfrei abgearbeitet wurde, wird die CDS Tabelle ausgegeben. Falls das Kommando selbst die Ausgabe der CDS aktiviert, wird der Stand dieser Option ignoriert.
    Ist diese Option aktiv, werden auch unbenutzte Eintrge ausgegeben.
    Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf.

/f  Innerhalb der Treiber existiert ein ungenutzter Bereich, worin der Treibername gespeichert werden kann. Normalerweise nutzt swsubst den Anfang dieses Bereichs, bis ein nicht druckbares Zeichen gefunden wird. Ist diese Option angegeben, wird der gesamte Bereich benutzt und nicht druckbare Zeichen hexadezimal angegeben. Hierfr werden diese Zeichen durch dargestellt, wobei ?? fr zwei hexadezimale Ziffern steht.
    Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf.

/_  Normalerweiser wird lediglich eine Untermenge der 16 verfgbaren Flags ausgegeben. Mit dieser Option wird innerhalb der CDS Tabelle eine kleine bersicht verfgbar gemacht, welche alle Flags anzeigt. Die Flags mit Namen: Netzwerk, Physisch, geJOINt, geSUBSTet und Hidden werden mit ihrem Anfangsbuchstaben gekennzeichnet, wenn sie gesetzt sind; alle anderen mit einem Plus. Ist das jeweilige Flag nicht gesetzt, wird es mit einem Bindestrich gekennzeichnet.
    Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf.

/k  Die Angabe dieser Option weist swsubst an, Pfade falls ntig anzulegen, z.B. "swsubst /k f: c:\foord "O dem Laufwerk C: an. Hierbei ist es unerheblich, ob "C:O" oder "C:Ochtung: Dies ist standardmig NICHT eingestellt!
    Eine zweite Angabe der Option hebt den Effekt der vorherigen sowie von /t wieder auf.

/t  Diese Option weist swsubst an, nachzusehen, ob die bentigten Pfade existieren. Falls nicht, wird das Kommando abgebrochen.
    Eine zweite Angabe der Option hebt den Effekt der vorherigen sowie von /k wieder auf.

/d  Das ist keine wirkliche Option, sondern entspricht bei den Kommandos /j und /u dem /d als zweites Argument.
    Eine zweite Angabe der Option hebt den Effekt der vorherigen wieder auf.

/o=#
    Diese Option dient ebenfalls nur den Kommandos /u und /j und berschreibt den standardmig aus dem Pfad gewonnenen Backslashoffset. Achtung! Mit Vorsicht zu verwenden!
    Eine zweite Angabe der Option berschreibt eine vorherige.
    Die Zahl # mu sich im Bereich von 0..66 bewegen und darf in C-Notation angegeben werden, d.h.: beginnt die Zahl entweder mit "0x" oder "0X", wird der Rest als hexadezimal angesehen, mit "0" als oktal, ansonsten als dezimal. Ist # Null, wird der Effekt aufgehoben und der Backslashoffset aus dem Pfad hergeleitet.
    Diese Option wird bei Netzwerkpfaden bentigt, welche nicht mit DOS-Pfaden konform sind.

/x=??
    Diese Option schliet die angegebenen Laufwerke whrend der Suche nach einem Volumekennzeichen ber die erweiterte "::*:" Laufwerksspezifikation aus.
    Jede Option /x=?? berschreibt eine vorherige, /x= nimmt alle Laufwerke in den Suchproze auf.

/m  Dieses Kommando akzeptiert eine beliebige Zahl von Argumenten, welche alle als Pfadspezifikationen angesehen werden. Sie werden einschlielich des vollstndigen Pfades angelegt.

/c  Diese Kommando akzeptiert genau ein Argument, welches mit Kommando /m angelegt wird. Anschlieend wird in dieses Verzeichnis gewechselt, dabei gegebenenfalls auch das aktuelle Laufwerk gewechselt.

/j  Dieses Kommando entspricht JOIN ohne Restriktionen.
    Es gibt zwei Formate:
    1) lw ( /d | - )
    welches jede SUBST- bzw. JOIN-Beziehung des logischen Laufwerks lw lst.
    2) lw1 [-]lw2:pfad
    welches ebenfalls eine SUBST- bzw. JOIN-Beziehung des logischen Laufwerks lw1 lst und anschlieend das Laufwerk lw1 in den Pfad pfad auf Laufwerk lw2 einfgt. Logische Pfade werden ber den DOS Ruf truename in physische transformiert. Physische Pfade werden in Grobuchstaben umgewandelt und vervollstndigt. Um dies zu verhindern, mu ein zweiter Bindestrich vorangestellt werden. Merke: Pfade, welche mit zwei Backslashes "\\" beginnen, gelten als Netzwerkpfade. Ihnen wird automatisch ein Bindestrich vorangestellt.
    Wenn DOS einen Pfad anzeigt, knnen am Beginn einige Zeichen ausgelassen werden. Dieses Verhalten wird ber den Backslashoffset geregelt. Da z.B. fr Netzwerkpfade dieser Offset nicht aus der Pfadangabe ersichtlich ist, kann er mittels der Option /o manuell gesetzt werden.

/u  Entspricht dem /j Kommando, auer da das Laufwerk nicht geJOINt, sondern substituiert wird.

/q  Dieses Kommando testet die Laufwerksflags. Die Syntax ist analog dem Kommando setze Laufwerksflags, lediglich der Modus '=' und die Flags "ON" und "OFF" werden nicht untersttzt. Das Ergebnis wird ber den ERRORLEVEL von swsubst dem rufenden Programm mitgeteilt.
    Ein ERRORLEVEL von Null besagt, da die Flags entsprechend des Kommandos gesetzt sind. Ein Wert grer als Null kennzeichnen einen Fehler.

/r  Dieses Kommando erlaubt die Gertetreiberliste auszugeben und zu durchsuchen. Es erlaubt maximal ein Argument. Falls das Argument fehlt oder entweder '+' oder '-' ist, wird die Kette wie folgt ausgegeben:
    NUL
    CON <<D>> ANSI
    MSCD001 <<D>> SGCDU
    EMMXXXX0 <<D>> EMM386
    CON
    AUX
    PRN
    CLOCK$
    COM1
    LPT1
    LPT2
    Die Namen links vom "<< >>" sind die Treibernamen, das Zeichen innerhalb der "<< >>" ist der MCB-Typ (welcher ab DOS Version 4 verfgbar ist) und der Name rechts vom "<< >>" sind die Dateinamen des jeweiligen Treibers. Letztere sind ein Zugestndnis der Routine, welche den Treiber lud, deshalb knnen sie fehlen.
    Das Suchen wird aktiviert, wenn das zustzliche Argument weder '+' noch '-' ist. Falls das erste Zeichen ein '+' ist, werden auch die Namen rechts vom "<< >>" zur Suche mit herangezogen. In den Namensvergleich fliet ein fhrendes '+' bzw. '-' nicht mit ein.
    Falls ein passender Eintrag gefunden wurde, wird der ERRORLEVEL auf Null gesetzt, ansonsten auf einen Wert grer als Null.

/l  Dieses Kommando erlaubt die Liste der MCBs (Speicherkontrollblcke) auszugeben und zu durchsuchen. Es erlaubt maximal ein Argument. Falls das Argument fehlt oder entweder '+' oder '-' ist, wird die Kette wie folgt ausgegeben:
    0x0264 M 0x01e4 nam=SD sys:data
        0x0265 D 0x0048 nam=HIMEM drv=XMSXXXX0 sys:device_driver
        0x02ae D 0x00c3 nam=EMM386 drv=EMMXXXX0 sys:device_driver
        0x0372 F 0x0082 nam=ilegiert sys:FILES
        0x03f5 X 0x0005 sys:FCBS
        0x03fb B 0x0020 sys:BUFFERS
        0x041c L 0x002c sys:LASTDRIVE
            0x041d A 0x0000 own#0x5c3a
    0x0449 M 0x0004 nam=SC sys:code
    0x044e M 0x0003 own=COMMAND
    0x0452 M 0x00bc nam=COMMAND
    0x050f M 0x0040 nam=arameter env=COMMAND
    0x0550 M 0x001d env=SWSUBST
    0x056e M 0x020f nam=sgcdu
    0x077e M 0x03de nam=MSCDEX
    0x0b5d M 0x1aa3 nam=SWSUBST
    0x2601 Z 0x79fd sys:free sys:end_of_chain
    0x9fff M 0x1159 nam=SC sys:code
    0xb159 M 0x0107 nam=SD sys:data
        0xb15a D 0x0106 nam=ANSI drv=CON sys:device_driver
    0xb261 M 0x0003 sys:free
    0xb265 M 0x0598 sys:free
    0xb7fe M 0x2002 nam=SC sys:code
        0xb7ff M 0x2000 nam=SM sys:memory
    0xd801 M 0x07d5 nam=SMARTDRV
    0xdfd7 Z 0x1028 sys:free sys:end_of_chain
    Die Elemente haben folgende Bedeutung, von links nach rechts:
    + Die Adresse des MCB, hexadezimal und immer mit den fhrenden "0x".
    + Der Typ des MCB. Er kann ein Leerzeichen sein.
    + Die Gre des verwalteten Speichers in Paragraphen, ebenfalls hexadezimal und mit den fhrenden "0x". Diese Zahl wird nur ausgegeben, wenn das Argument "+" angegeben wurde.
    + Der Versuch, die Verwendung des MCB zu erraten. Er kann eine beliebige Kombination folgender Informationen sein:
    ++ nam=???. Der Name des in den Speicherbereich geladenen Programms.
    ++ env=???. Der Name des Programms, zu welchem dieser MCB als Umgebungsbereich gehrt.
    ++ drv=???. Der Name des Treiber, welcher den MCB belegt.
    ++ own=???. Der Name des Programms, zu welchem der MCB gehrt.
    ++ sys:???. Kennzeichnet einen vom System verwalteten Speicherbereich. Die "???" stehen fr den Datentyp, welcher darin abgelegt ist. Eine besondere Bedeutung hat "sys:end_of_chain" bzw. "sys:Kettenende", welches das Ende einer MCB Kette markiert.
    Die oben genannten Namen mssen nicht in den MCB abgelegt sein. Deshalb kann an Stellen, an denen ein Name stehen mu, das Ausweichformat "*#0x????" verwendet werden, wobei "*" fr den Informationstyp (die ersten drei Buchstaben) und "????" fr die stets vierstellige Adresse des MCB des Eigentmers stehen.
    Die Ausgabe ist fr die Weiterverarbeitung durch ein anderes Programm gedacht, deshalb wird pro Zeile die Informationen eines MCB und die Elemente ohne zustzliche Lerrzeichen ausgegeben. Da swsubst versucht, innerhalb eines MCB wiederum eine MCB-Kette zu identifizieren, knnen nutzlose Eintrge entstehen (s. 0x041d).
    Im obigen Beispiel sind zwei MCB mit "sys:end_of_chain" markiert. Dieses Verhalten basiert auf der Art und Weise, wie moderne DOS Versionen den Speicher verwalten, indem jeweils eine Kette im konventionellen und eine im hohen Speicherbereich liegen.
    Das Suchen wird aktiviert, wenn das zustzliche Argument weder '+' noch '-' ist. Fr den Vergleich wird die Gro- und Kleinschreibung ignoriert, und, auer wenn das erste Zeichen des Arguments ein '+' ist, mu der aus dem MCB gelesene Name (in obiger Liste die Namen hinter dem "nam=" Element) lediglich mit dem Argument beginnen. In den Namensvergleich fliet ein fhrendes '+' bzw. '-' nicht mit ein.
    Falls ein passender Eintrag gefunden wurde, wird der ERRORLEVEL auf Null gesetzt, ansonsten auf einen Wert grer als Null.

/s  Dieses Kommando bentigt genau zwei Argumente, welche als Laufwerksspezifikationen interpretiert werden. Beide werden einfach gegeneinander ausgetauscht.

/n  Dieses Kommando ist eng mit /s verwandt. Anstatt jedoch die Eintrge in der CDS-Tabelle auszutauschen, werden die Unitnummern des Gertetreibers ausgetauscht. Deshalb mssen beide Laufwerke vom selben Gertetreiber verwaltet werden. Das ist aus unbekanntem Grund der einzige Weg, die Diskettenlaufwerke miteinander zu vertauschen.
    Wird das Kommando ohne weitere Argumente aufgerufen, werden beide Diskettenlaufwerke vertauscht; ansonsten die angegebenen. Achtung: Sie sollten dieses Kommando nur auf Diskettenlaufwerke anwenden.
    Dieser Austausch wird weder durch die Kommandos: -, -- und /d noch durch direkte Manipulation der Laufwerksflags, z.B. mit "X:=OFF" oder "X:=ON", zurckgesetzt. Sie mssen stattdessen erneut getauscht, oder der Rechner neu gestartet werden.

/w  Dieses Kommando bentigt genau ein Argument, welches eine Laufwerksspezifikation darstellt. Der Buchstabe dieses Laufwerks wird als ERRORLEVEL zurckgegeben. Dabei kennzeichnet ein ERRORLEVEL zwischen 65 (ASCII 'A') und 90 (ASCII 'Z') den Laufwerksbuchstaben, eine Null, da das Laufwerk nicht existiert, und jeder andere Wert einen Fehler.

ohne Kommando
    In diesem Fall entscheiden die folgenden Argumente, welches Kommando zur Ausfhrung gebracht wird:

ohne ein weiteres Argument
    Wird die CDS Tabelle ausgegeben:
    H 0000:0000 NET .... PHYS ..... HIDDEN \H.
            ==>.MSCD001 .<== _NP------H-------_
    Nummer geJOINter Laufwerke per CDS 0 per Flag: 0 => scheint OK
    Zeile 1 von links nach rechts:
    + Logischer Laufwerksbuchstabe
    + Adresse des DPB
    + NETWORKED (Netzwerk) Flag gesetzt
    + JOINED Flag nicht gesetzt
    + PHYSICAL (lokal) Flag gesetzt
    + SUBST Flag nicht gesetzt
    + HIDDEN (versteckt) Flag gesetzt
    + Der physische Pfad. Das Anfhrungszeichen markiert den Backslashoffset. Alle Zeichen links davon sind nicht sichtbar. Falls das Laufwerk aussieht, als sei die Unitnummer verndert, z.B. mithilfe des /n Kommandos, wird " => X:" angehangen, wobei 'X' fr das wahrscheinlichste Laufwerk steht, worauf zugegriffen wird.
    Zeile 2:
    + Treibername. Die "==>..<==" sind NICHT Bestandteil des Namens.
    + bersicht aller Flags. Erzeugt durch die /_ Option. Die umgebenden Unterstriche haben keine Bedeutung.
    Zeile 3:
    Die Statistik geJOINter Laufwerke: Beide Zahlen sind gleich, so da kein Fehler vorliegen sollte.
    Falls die /a Option nicht aktiv ist, werden nur benutzte Eintrge und der letzte verfgbare angezeigt.

entweder - oder --
    - lst alle SUBST- und JOIN-Verbindungen. Das wird ber das Kommando "/u lw: /d" fr jedes in Frage kommende Laufwerk erreicht.
    -- fhrt dieses Kommando fr alle Nicht-Netzlaufwerke aus.

setze Laufwerksflags
    Dieses Kommando bentigt genau ein Argument in folgendem Format: lw:{(-+=)flag}, wobei der Modus - bedeutet: zurcksetzen bzw. nicht gesetzt; +: setzen bzw. gesetzt; und =: das Flag setzen und alle anderen zurcksetzen.
    Folgende Flags sind verfgbar: OFF schaltet das Laufwerk aus, d.h. es ist nicht mehr ansprechbar; ON macht es wieder verfgbar (Das ist NICHT die Umkehrung von OFF, sondern der Versuch die ursprngliche Bedeutung dieses Eintrags zu erraten. Das ist gleichbedeutend mit dem Kommando "/u lw: /d".); PHYSICAL, JOIN, NETWORK, SUBST und HIDDEN referenzieren das gleichnamige Flag; eine Zahl zwischen 0 und 15 referenzieren das n-te Flag.
    Alle Flags auer ON knnen bis auf ein Zeichen abgekrzt werden.

ansonsten
    wird das Kommando /u angenommen.

SEE ALSO
subst, join.

KNOWN BUGS

•   Ein relativer physischer Pfad wird mit logischen Pfadkomponenten vervollstndigt.

•   Manchmal schlagen Nicht-Standardmanipulationen fehl. Das kann bedeuten, da das System abstrzt oder lediglich eine harmlose Fehlermeldung, wie 'Kann *.* nicht finden', erscheint.

•   Ein Laufwerk ON (ein-) zuschalten scheint die Umkehrung fr OFF zu sein. Das klappt fr lokale Festplatten, manchmal fr Laufwerke mit Softwaretreiber, jedoch selten fr Netzwerke oder CD-ROMs.

•   Wirkt nur auf MS-DOS kompatiblen Betriebssystemen, jedoch wird nicht berprft, ob tatschlich eines vorliegt.

•   swsubst prft einige Fehlerquellen ab, jedoch knnen auch in einigen Fllen korrekte Einstellungen in anderen Fllen das System abstrzen lassen.

•   Viele Kommandos, z.B. /s, /u und /j, machen es Microsoft Windows 3+ unmglich auf den betroffenen Laufwerken den 32-Bit-Zugriff anzuwenden bzw. dort eine permanente Auslagerungsdatei anzulegen.

EXAMPLES

swsubst /w ::HD_e:
    Sucht nach einem Laufwerk, dessen Kennzeichn mit "HD_E" beginnt und gerade ber logische Laufwerksbuchstaben ansprechbar ist. Das Ergebnis kann wie folgt getestet werden:
    swsubst /w ::hd_e:
    if errorlevel 91 goto Fehler
    if errorlevel 90 echo Laufwerk Z:
    if errorlevel 89 echo Laufwerk Y:
     ...
    if errorlevel 65 echo Laufwerk A:
    if errorlevel 1 goto Fehler
    if not errorlevel 1 echo Kein Laufwerk HD_E gefunden!
    Unter 4DOS auch mit:
    iff %? .LE. 90 .AND. %? .GE. 65 then
        echo Laufwerk %@char[%?]
    elseiff errorlevel 1 then
        echo Fehler
    else
        echo Es gibt kein Laufwerk mit Kennzeichnug HD_E
    endiff

swsubst /s e ::HD_e:
    Tauscht das logische Laufwerk E: mit dem Laufwerk aus, welches das Kennzeichen "HD_E" besitzt. Damit kann sichergestellt werden, da das Laufwerk mit dem Kennzeichen "HD_E" stets ber E: verfgbar ist. Beachten Sie auch den Paragraph Known Bugs.

CONTRIBUTERS
    Steffen Kaiser
Ernst-Thlmann-Strae 2
     D-09126 Iden
 Deutschland - Germany