DOS-Corner Nikolaus Heusler PC go 02.19.9402.18.94 Objekt: PC go! Ausgabe: diverse Rubrik: DOS-Corner Redakteur: Heinz HB Autor: Nicki Heusler, XXX/XXXXXX Datum: 19.2.94 Thema: Tips und Tricks zu DOS, Batch usw. Bitte ersetzt in diesem Text alle Symbole // durch den Klammeraffen! ================================================================================ //zu:Suche nach verlorenen Dateien //t4:Häufig hat man als Anwender das Problem, daß eine Datei (z.B. ein Text) aus einem Anwenderprogramm heraus gespeichert wurde, aber nicht im eigentlich anvisierten Unterverzeichnis gelandet ist. Auch beim Kopieren können solche Effekte auftreten. Und dann sucht man stundenlang die zahlreichen Verzeichnisse seiner Festplatte nach der Datei ab... Für die komfortable Suche, die auch in Unterverzeichnissen erfolgt, sollten Sie daher folgende Batch-Datei SUCHE.BAT verwenden: //li:ECHO ON ECHO Bitte haben Sie etwas Geduld ECHO n|CHKDSK/v > \liste.txt FIND "%1" \liste.txt | MORE //t4:Dieses Programm wird aufgerufen mit //li:SUCHE (Suchbegriff) //t4:Also zum Beispiel //li:SUCHE brief.txt //t4:In den ersten beiden Zeilen wird die Kommandoausgabe eingeschaltet und der Hinweis ausgegeben. Zeile 3 ruft das externe Dienstprogramm von MS-DOS CHKDSK auf, wobei einerseits die Option /V angegeben wurde, damit der Befehl auch Unterverzeichnisse durchsucht. Außerdem wird mit ECHO n| das Zeichen n übergeben; dies ist wichtig, da der Befehl CHKDSK auch eine Überprüfung des aktuellen Laufwerks vornimmt und dabei möglicherweise verloren gegangene Bereiche erkennt. In diesem Fall erfolgt eine Abfrage an den Benutzer, ob diese Bereiche wiederhergestellt (verbunden) werden sollen. Diese Abfrage wird bei dieser Anwendung jedoch weder angezeigt noch ist sie erforderlich, da die Ausgabe in die Datei liste.txt umgeleitet wird. Damit die Batchdatei an dieser Stelle daher ggf. nicht hängen bleibt, wird die Antwort »nein« also gleich mit übergeben. Zeile 4 sucht nun nach dem beim Aufruf übergebenen ersten Parameter %1 (Suchbegriff) und gibt die Fundstellen dann seitenweise (Filter MORE) auf dem Monitor aus. Beachten Sie, daß FIND zwischen Groß- und Kleinbuchstaben unterscheidet. Da in dieser Batch-Datei die externen Dienstprogramme MORE und CHKDSK aufgerufen werden, sollten Sie sicherstellen, daß der Zugriff auf dieses Tools auch möglich ist: Ggf. Pfad-Angabe einbauen. //zu:Datenschutz: Prompt einmal anders //t4:Um den Zugriff auf bestimmte Daten Unbefugten zu verwehren, hier ein Paßwortschutz ungewöhlicher Art: Bauen Sie folgende Befehle in Ihre Autoexec.BAT ein: //li:BREAK OFF ECHO OFF CLS ECHO PASSWORT: PROMPT $e[30m $e[40m //t4:Der PROMPT-Befehl setzt Schrift und Hintergrundfarbe auf Schwarz. Es erscheint nur das Wort »PASSWORT«. Sämtliche weitere Eingaben sind nicht sichtbar. Erst der Aufruf einer Batch-Datei gibt den normalen Bildschirm wieder. Das »Paßwort« kann maximal acht Zeichen enthalten, zum Beispiel »BIRGIT«. In diesem Fall müßte eine Batch-Datei mit dem Namen BIRGIT.BAT existieren, die wie folgt aussieht: //li:ECHO ON PROMPT $e[1m $e[37m $e[44m $p$p *setzt Bildschirm weiß/blau ECHO OFF CLS KEYB GR PATH C:\BATCH MENUE //t4:Es geht jetzt im Hauptverzeichnis BATCH mit der Datei MENUE weiter, die beispielsweise das Hauptmenü für den Anwender Ihres Computers enthalten könnte. Solange der Anwender nicht »blind« das richtige Paßwort eingibt, wird die Batchdatei nicht aufgerufen, die die richtigen Bildschirmfarben wiederherstellt, und mit dem Terminal kann nicht gearbeitet werden. //zu:Dateien verschlüsseln //t4:Was auf dem guten alten C 64 möglich war, geht auch auf einem PC: Vielleicht haben Sie sich schon einmal darüber geärgert, daß andere Ihre geheimen Daten lesen können, oder Sie haben versehentlich wichtige Files gelöscht. Vermeiden läßt sich beides durch einen Filenamen, der auf ganz besondere Weise eingegeben werden muß. Benennen Sie Ihre Dateien um: Sie müssen nur im Dateinamen an beliebiger Stelle, am besten am Ende des Namens ein geschütztes Leerzeichen eingibt. Dieses hat den Ascii-Code 255 und wird eingegeben, indem Sie die ALT-Taste gedrückt halten und dann im separaten Ziffernblock der Tastatur (nicht über dem Buchstabenblock) die Ziffern <2>, <5> und <5> drücken. Wenn Sie jetzt loslassen, erscheint ein Symbol am Bildschirm, das rein optisch nicht von einem Leerzeichen zu unterscheiden ist. Wenn Sie nun in DOS arbeiten, läßt sich diese Datei nicht löschen, öffnen oder kopieren, wenn Sie nicht wissen, daß dieses Spezial-Leerzeichem im Dateinamen verborgen liegt. Trotzdem ist das File natürlich für Sie verfügbar. Sie müssen nur den Dateinamen wieder exakt so eingeben, also mit dem geschützten Leerzeichen . Ein besonders schwierig zu knackender Code ergibt sich bei Kombination normaler und geschützter Leerzeichen im Namen. Für die Schreibweise ergeben sich dann sehr viele Möglichkeiten, von denen aber nur eine das File anspricht. //zu:Ballast abwerfen: Die TEMP-Verzeichnisse //t4:Bei allen Anwendern, die mit Microsoft-Produkten (insbesondere Windows) arbeiten, findet sich ein Verzeichnis \TEMP auf der Platte, das im wesentlichen als temporärer (vorübergehend benutzter) Speicher verwendet wird. Hier hinein werden Programme und Dateien kopiert, die dort nur vorübergehend stehen und nach der jeweiligen Sitzung am PC wieder gelöscht werden - sollten, um Speicherplatz zu sparen. Um das Löschen dieses Verzeichnisses zu automatisieren, könnte es eine gute Idee sein, in die Autoexec.BAT einen Befehl dieser Art aufzunehmen: //li:DEL C:\TEMP\*.* //t4:Da das Betriebssystem MS DOS beim Löschen aller Einträge innerhalb eines Verzeichnisses eine Sicherheitsabfrage stellt, die hier aber - bei jedem Einschalten des Computers zu sehen - nur stört, würde es sich anbieten, auch gleich die Antwort auf diese Frage: »y« bzw. »j« in der deutschen DOS-Version gleich mitzuliefern. Dafür bieten sich zwei Alternativen an: 1. Die Eingabe des »j« oder »y« wird durch Umlenken aus einer Textdatei realisiert. Diese Datei enthält nur ein Zeichen: das »y« oder »j«. Sie wird folgendermaßen angelegt: //li:COPY CON YES.TXT Y ^Z //t4:Alle drei Zeilen müssen mit abgeschlossen werden. Die Angabe in der dritten Zeile meint bzw. , auf manchen Terminals ist auch die Taste damit belegt. Der Löschbefehl in der Autoexec.BAT hat nun folgendes Aussehen: //li:DEL C:\TEMP\*.* < C:\verzeichnisname\YES.TXT //t4:2. Die Eingabe des »y« bzw. »j« wird per ECHO-Befehl mit Pipe-Symbol | () realisiert. Nehmen Sie dazu folgende Zeile in die Autoexec.BAT auf: //li:ECHO y|DEL C:\TEMP\*.* //t4:Beide Methoden, Eingaben an das Betriebssystem zu übergeben, lassen sich entsprechend natürlich auch bei anderen Gelegenheiten beim Umgang mit MS DOS einsetzen. //zu:Lila Pause //t4:Wird Ihnen die Pause-Meldung unter DOS (»wenn bereit, eine beliebige Taste drücken«) zu langweilig oder trifft sie nicht zu (gerade im Umgang mit dem Norton BE besonders häufig), so kann folgende Batchdatei eingesetzt werden: //li:@ECHO OFF ECHO %1%2%3%4%5%6%7%8%9 PAUSE > NUL //t4:Die zweite Zeile gibt einfach die ersten neun Parameter, welche dieser Datei übergeben werden, aus. Danach erfolgt der normale PAUSE-Befehl, dessen Bildschirmausgabe allerdings in den Abfalleinmer (NUL-Device) umgeleitet wird. Diese drei Zeilen müssen in einer eigenen Batchdatei, zum Beispiel WAIT.BAT abgelegt werden. Will man nun in einer anderen Batchdatei eine eigene Pause-Meldung definieren, so muß der Befehl //li:CALL WAIT »Bitte Diskette in Laufwerk A einlegen, dann beliebige Taste« //t4:eingegeben werden. Als Meldung können maximal neun Wörter (durch Leerzeichen getrennt) definiert werden. Bei der Anwendung ist darauf zu achten, daß sich die Daten im gleichen Verzeichnis befinden wie die Datei, die WAIT.BAT aufruft. //zu:Aktuellen Pfadnamen ermitteln //t4:Oft steht man vor der Aufgabe, den Namen des aktuellen Pfades abzufragen - vor allem dann, wenn die ANSI-Sequenz $p$g nicht im Prompt vorkommt. Unix-Anwender kennen zu diesem Zweck den Befehl PWD - print working directory. Auch MS-DOS bietet ähnliches: CD ohne Parameter gibt den aktuellen Pfad inklusive Laufwerksangabe aus. CD > datei.xxx leitet diese Ausgabe in eine Datei um. Praktische Anwendung: Das Verzeichnis in einer eigenen Datei speichern, um später mit einem einzigen kurzen Befehl wieder zurückkehren zu können. Hier ein Beispiel: //li:COPY \BEFEHL.CD \CDB.BAT CD >> \CDB.BAT //t4:Voraussetzung dafür ist, daß im Root-Directory eine Datei BEFEHKL.CD existiert, die nur den Inhalt »cd« hat. Möchten Sie keinen Editor bemühen, kann diese Datei auch folgendermaßen angelegt werden: //li:COPY CON \BEFEHL.CD CD //t4:Nun können Sie das Verzeichnis wechseln und beliebig weiter arbeiten. Wollen Sie an eine gespeicherte Stelle zurückkehren, geben Sie einfach CDB ein. //zu:Lean Management: Rationalisierung durch Menüs //t4:Wie rufen Sie denn Ihre Programme auf? Wenn Sie jedesmal alles von Hand eingeben müssen, verschwenden Sie Zeit. Wie wäre es mit einem Menü, das beim Start des PC erscheint und alle häufigen Befehle und Anwendungen für Sie auf Tastendruck erledigt? Alles was Sie dazu brauchen sind einige freie Byte auf der Platte. Sie fangen am besten mit dem Menü an. Nachdem Sie ein Unterverzeichnis BATCH auf der Platte erzeugt haben, stellen Sie als Konzept eine Übersicht über die häufigsten Befehle und Anwendungen auf und überlegen sich für jeden Befehl eine Abkürzung. Zum Beispiel könnten Sie AutoCAD mit »A«, DBase mit »D«, Word mit »W« und Windows mit »I« abkürzen. Wenn Sie sich diese Liste zusammengestellt haben, geben Sie sie mit einem Texteditor oder -verarbeitungsprogramm ein und speichern Sie unter dem Namen MENU.DAT: //li:A ... AutoCAD D ... DBase III F ... kleine Diskette formatieren I ... Windows M ... Multiplan W ... Word //t4:Verwenden Sie im Interesse der Übersicht maximal 79 Spalten in 20 Zeilen. Nun schreiben Sie eine Steuerdatei MENU.BAT dazu, die nur drei Befehle enthält: //li:ECHO OFF CLS TYPE \BATCH\MENU.BAT //t4:Hier wird in Zeile 1 die Befehlsausgabe abgeschaltet. In Zeile 2 löschen wir den Bildschirm, um dann in Zeile 3 die vorbereitete Liste zu drucken. Diese Lösung ist gegenüber eine Ausgabe durch ECHO-Befehle nicht nur wartungsfreundlichen, sondern auch schneller. Was jetzt noch fehlt, sind die eigentlichen Befehle. Nach der Ausgabe der Liste kehrt der PC ja in den Eingabemodus zurück. Für jede Anwendung muß jetzt eine eigene Batchdatei her, deren Name nur aus einem Buchstaben besteht: Dem zuständigen Kürzel. Also beispielsweise die Datei W.BAT für den Aufruf von MS Word: //li:C: CD \WORD (Vorbereitungsbefehle) WORD (Abschlußbefehle) CD \ CLS MENU //t4:Nach der Deklaration der Festplatte als aktuelles Laufwerk wechseln wir in das Word-Verzeichnis. Dort könnten Vorbereitungsbefehle ausgeführt werden, die den Ablauf des Programms erleichtern oder ermöglichen sollen. Zum Beispiel kann man hier ein speicherresidentes Tool entfernen, um Speicherplatz freizumachen. Dann wird das eigentliche Programm aufgerufen, in diesem Fall mit dem Befehl WORD. Als Beispiel für Abschlußbefehle wäre in diesem Fall denkber, Sicherheitskopien *.SIK der Texte zu löschen oder das speicherresidente Utility wiederherzustellen. Lassen Sie Ihrer Phantasie freien Lauf. Mit den letzten drei Zeilen löschen wir den Bildschirm und rufen dann im Hauptverzeichnis sofort wieder das Menü auf. Nach diesem Schema müssen nun alle Steuerdateien angelegt werden, und Sie brauchen zur kompletten Abwicklung eines Programms vom Anfang bis zum Ende nur noch einen oder zwei Buchstaben eingeben. Achtung: Damit die Steuerdateien in \BATCH im Root-Diretory auch aus jedem anderen Verzeichnis aufgerufen werden können und gefunden werden, müssen wir in der Autoexec.BAT die Zeile //li:PATH=C:\BATCH //t4:einfügen oder eine bereits bestehende Pfadangabe entsprechend erweitern. Ohne sie müßten Sie zum Aufruf der Steuerdatei erst mit //li:CD BATCH //t4:in das zuständige Unterverzeichnis wechseln. Auch das Menü können Sie nun aufrufen. Geben Sie einfach MENU ein. Auch das läßt sich schließlich automatsieren, indem als letzter Befehl in die Autoexec.BAT der Befehl MENU.BAT geschrieben wird. //zu:Funktionstastenbelegung //t4:Mittels Escape-Sequenzen kann man unter DOS die Belegung der Funktionstasten definieren oder ändern. Mit folgender Anweisung werden die Tasten mit anderen Zeichen neu belegt: //li:PROMPT $e[Tastaturcode;Zeichenfolge;...p //t4:Informationen über die Tastaturcodes gibt das MS-DOS Handbuch. Mit der Anweisung //li:PROMPT $e[0;63;"DIR";13p //t4:wird beispielsweise das Kommando DIR auf die Funktionstaste gelegt. Will man diese Taste nun wieder mit der ursprünglichen Funktion belegen, so gibt man folgenden Befehl ein: //li:PROMPT $e[0;63;0;63;13p //t4:Voraussetzung für die Tastaturbelegung via ESC-Sequenzen ist, daß man in der Config.sys den Treiber ANSI.SYS geladen hat. //zu:Keine Probleme mehr mit SET //t4:Viele Programme benötigen Pfadangaben, um effizient arbeiten zu können. Diese werden meistens mit dem Befehl SET in der DOS-Umgebung gespeichert. Einer Zeichenfolge wird ein Pfad zugeordnet. Beispiel: //li:SET INCLUDE=C:\C\INCLUDE //t4:Besonders Compiler machen von dieser Art der Pfadangabe Gebrauch. Wichtig ist dabei, daß kein Leerzeichen eingegeben wird. Andernfalls findet der Computer das angegebene Verzeichnis nicht. Lassen Sie also überflüssige Spaces weg. //zu:Kopierprogramm //t4:Der MS-DOS Befehl XCOPY wird selten benutzt. Als »unkomfortabel« angestempelt schlummert er im Nirwana der Festplatte. Lassen wir ihn schlafen. Hier ist ein kurzes Batchprogramm DCOPY.BAT, das ganze Unterverzeichnisse von einem Laufwerk auf ein anderes kopiert. //li:@ECHO OFF REM DCOPY.BAT MD %2 XCOPY %1\*.* %2/S/E/W ECHO ON //t4:Befehlsformat: //li:DCOPY LW1:\PFAD LW2:\PFAD //t4:kopiert ein Verzeichnis mit Subdirectories von LW1 (Laufwerk) nach LW2. Der Befehl kann auch als Ersatz für den Befehl DISKCOPY eingesetzt werden, um etwa den Inhalt einer Diskette komplett in ein Verzeichnis der Festplatte zu kopieren. Der Aufruf lautet dann //li:DCOPY A:\ C:\TEXT //t4:Wieder ein Beispiel dafür, wie man einfach mit kurzen Batch-Files die tägliche Arbeit am PC erleichtert. //zu:Kopulieren für Mißtrauische //t4:Mit dem DOS-Befehl COPY werden einzelne Dateien kopiert, indem man den vollständigen Dateinamen der Quelldatei angibt (zum Beispiel BEISPIEL.PRG) oder einen Teil des Namens durch einen Joker oder Stern ersetzt (*.PRG oder BE?SPIEL.*). Sollen alle Dateien aus einem Verzeichnis kopiert werden, wird der Joker anstelle beider Namensteile eingesetzt (*.*). Der Befehl DISKCOPY kopiert ganze Disketten. Wenn man sicher sein will, daß während des Kopiervorgangs keine Fehler aufgetreten sind, können Quell- und Zieldatei(en) nach dem Kopieren verglichen werden: Einzelne Files mit COMP, ganze Disketten per DISKCOMP. In jedem Fall müssen vor dem Vergleich Angaben zu den Vergleichsobjekten gemacht werden. Bei Verwendung des erweiterten Kopier-Befehles XCOPY lassen sich Kopierung und Verifizierung zusammenfassen. Dazu geben Sie bei XCOPY die Option /V an (nach der Angabe des Ziel-Laufwerks). Beispiel: Um alle Batchdateien von der Platte C: auf das Laufwerk B: zu kopulieren und dabei die Kopie gleich auf Richtigkeit zu testen, schreiben Sie: //li:XCOPY C:\*.BAT A:/V //t4:Das Kopieren dauert dadurch etwas länger. Unter dem Strich ist diese Zeit jedoch kürzer als die Zeiten für die beiden Einzelvorgänge COPY und COMP bzw. DISKCOPY und DISKCOMP zusammen. Das wirkt sich vor allem bei größeren Dateien aus. //zu:Drucker ausgereizt //t4:Viele Programme (insbesondere Batchfiles) unterstützen nicht alle Schriftarten des Druckers. Trotzdem wäre es wünschenswert, zum Beispiel Schmalschrift, Kursiv- oder Fettschrift zur Verfügung zu haben. In den meisten Fällen reicht es, den Steuercode direkt zum Printer zu schicken. Diese werden in den Text eingefügt und vom Drucker interpretiert. Ein Beispiel: //li:ESC ! n //t4:Der Steuercode »ESC« wird mit der Taste (gedrückt halten) gefolgt von den Ziffern <2> und <7> auf dem separaten (!) Ziffernblock der Tastatur erzeugt. Wenn Sie jetzt loslassen, erscheint möglicherweise ein kleiner Pfeil nach links. Er wird nicht gedruckt, stattdessen erkennt der Drucker an dieser Stelle die »Aufgepaßt!«-Sequenz (Escape). Das Ausrufezeichen wird normal eingetippt. Für n gelten alle Zahlen von 0 bis 255, zum Beispiel n=4 für Schmalschrift, n=64 für Schrägschrift oder n=8 für Fettdruck. //zu:Mehr Platz für die Pfadangabe //t4:Bei großen Festplatten mit vielen Unterverzeichnissen ist es manchmal notwendig, sehr lange Pfadangaben in die Autoexec.BAT zu schreiben. Dabei kann es vorkommen, daß die letzten Pfadangaben einfach ignoriert werden. Dies liegt daran, daß MS-DOS den Pfad sowie einige andere Parameter, zum Beispiel den Prompt in einem reservierten Speicherbereich ablegt. Die Speichergröße für die »Umgebung« (Environment) läßt sich ab DOS 3.2 verändern. Standardmäßig sind 160 Byte vorgesehen. Mit der Config.SYS-Befehlszeile //li:SHELL = \ COMMAND.COM /E:3000 /P //t4:läßt sich der Speicherbereich auf einen beliebigen Wert zwischen 160 und 32768 Byte festsetzen. In unserem Beispiel sind es 3000 Byte. Erklärung: Die Config.SYS-Anweisung SHELL= dient normalerweise dazu, einen anderen Kommando-Interpreter als COMMAND.COM zu laden. Dabei kann es sich um ein selbstgeschriebenes oder gekauftes Programm handeln. Die genaue Syntax lautet: //li:SHELL = [Laufwerk:][Pfad]dateiname //t4:Die Angaben in eckigen Klammern sind optional. Wird der Standard-MS-DOS-Interpreter Command.COM geladen, stehen die Optionen /E:Umgebungsgröße in Bytes und /P zur Verfügung. Der Schalter /P bewirkt, daß nach dem Laden von Command.COM die Datei Autoexec.BAT ausgeführt wird. Die Optionen /E und /P sind nur wirksam in dem Zusammenhang mit Command.COM. Nikolaus M. Heusler