Tips + Tricks
- Schnelles Einstellen von Datum und Uhrzeit
- Alle Suchpfade im PATH-Eintrag abklappern
- Wechsel ins Verzeichnis der laufenden Batch-Datei
- CleanDisk selbstgebaut
- del *.* ohne Sicherheitsabfrage
- Schleifenzähler in Batch-Dateien
- Batch-Programm vorzeitig beenden
- Batch-Datei für eine bestimmte Zeit anhalten
- Leer-Datei erzeugen (auch mit "verbotenem" Namen)
- ANSI-Code in ASCII-Editor bearbeiten
- Beschleunigung von Datenträger-Zugriffen
- Schneller Booten
- Der PC als Schreibmaschine
- Datum und Uhrzeit protokollieren
- Boot-Viren plattmachen
- Editor und Hilfe ohne edit.com und help.com verwenden
- Diskette in einem Rutsch formatieren
- Leerzeichen in Datei- oder Verzeichnisnamen
- Unlöschbare Dateien
- Vermeintlicher Bug des copy-Befehles
- Datei ohne Editor bearbeiten
Schnelles Einstellen von Datum und Uhrzeit
Die DOS-Befehle "date" und "time" fordern nach der Ausgabe des aktuellen Datums bzw. der aktuellen Uhrzeit zu einer Neueingabe dieser Einstellungen auf. Diese muss mit der Enter-Taste bestätigt (bzw. übergangen) werden. Die folgenden Befehle erfordern keine Eingabebestätigung, können also auch in einer Batch-Datei verwendet werden:
echo 28.1.2008 | date
echo 20:22:40 | time
Alle Suchpfade im PATH-Eintrag abklappern
Der PATH-Eintrag in der AUTOEXEC.BAT enthält i.d.R. mehrere Verzeichnispfade, die durch ein Semikolon (;) voneinander getrennt sind. Soll z.B. mit dem DIR-Befehl nur in diesen Verzeichnissen nach einer bestimmten Datei gesucht werden, müsste der PATH-Eintrag eigentlich in seine einzelnen Pfade zerlegt werden und der DIR-Befehl dann nacheinander mit jedem dieser Einzelpfade aufgerufen werden. Und das geht mit einer einzigen Code-Zeile:
for %%n in (%path%) do dir %%n\gesucht.txt
DOS zerlegt den PATH-Eintrag ganz von selbst in seine Einzelpfade, denn neben dem bekannten Leerzeichen ist auch das Semikolon ein Trennzeichen. Das gilt auch für Tabulatoren und Kommata. Deswegen funktionieren auch solche kuriosen Befehle wie:
copy;quell.txt;ziel.txt
oder ,dir,
Hinweis: Die %path%-Variable wird nur in Batch-Dateien interpretiert.
Wechsel ins Verzeichnis der laufenden Batch-Datei
Oftmals ist es wichtig, dass beim Start einer Batch-Datei ein bestimmtes Verzeichnis geöffnet ist, damit z.B. relative Pfadangaben in der Batch-Datei funktionieren o.ä. Die Variable %0 liefert den vollständigen Dateipfad der gerade laufenden Batch-Datei. Das Problem ist, den Dateinamen vom Pfad abzuschneiden, um an den "reinen" Verzeichnispfad zu kommen. Dies erledigt DOS jedoch von selbst:
CD %0\..
Was passiert? DOS versucht gar nicht erst, in das (nicht vorhandene) Verzeichnis %0 zu wechseln, um von dort nach .. zu schalten. Vielmehr wird die Pfadangabe "entrelativiert" (in einen absoluten Pfad umgewandelt), bevor sie der CD-Befehl überhaupt zu sehen bekommt. Aus C:\BATCH\MYBATCH.BAT\.. wird also C:\BATCH. Dieser Trick funktioniert auch mit einem weiteren Dateipfad, nämlich der Umgebungsvariablen COMSPEC, die den Pfad zur aktiven COMMAND.COM enthält:
CD %COMSPEC%\..
Hinweis: Beide Befehle funktionieren nur in Batch-Dateien
CleanDisk selbstgebaut
Mit ganzen 14 Zeilen Batch-Code können Sie sich gewisse "Utilities" zum Reinigen Ihrer Festplatte von lästigen TMP-, SIC- und BAK-Dateien sparen. Schreiben Sie folgenden Code in eine Batch-Datei mit dem Namen CLEANDSK.BAT und achten Sie dabei unbedingt auf die Groß- und Kleinschreibung!
@echo off
TYPE %0 | find "DEL" | find "TYPE" /v > a.bat
attrib %1 -h -r +a /s
attrib %1 /s > deltemp.bat
call deltemp.bat
del deltemp.bat
del a.bat
Goto Ende
DEL %1 /p
type DELtemp.bat | find /v /i "%1" > deltemp.tmp
DEL deltemp.bat
ren DELtemp.tmp deltemp.bat
DELtemp.bat
:Ende
Wenn Sie Cleandsk unter New-DOS einsetzen, muss anstelle von a.bat der Dateiname a-----.bat und unter DR-DOS --a---.bat angegeben werden. Starten Sie z.B. das Löschen aller Dateien mit der Endung .TMP auf Festplatte C: mit folgendem Befehl:
cleandsk c:\*.tmp
del *.* ohne Sicherheitsabfrage
Der Befehl "del" zum Löschen von Dateien tut seine Arbeit in der Regel ohne Rückfrage. Nur wenn *.* als Datei-Maske angegeben wird, fragt "del", ob es wirklich alle Dateien löschen soll. Da solche Unterbrechungen in Batch-Dateien meist unerwünscht sind, lassen Sie DOS diese Frage einfach selbst mit "J" (=Ja) beantworten:
echo J | del *.*
Schleifenzähler in Batch-Dateien
Das folgende Code-Fragment führt den (Dummy-) Befehl "echo ..." fünfmal hintereinander aus. Möglich sind Wiederholraten bis zu etwa 100.
set counter=
:Nochmal
echo Counter-Stand: %counter%
set counter=%counter%x
if not (%counter%) == (xxxxx) goto Nochmal
set counter=
Anstelle des "echo"-Befehles setzen Sie den Code, der mehrmals ausgeführt werden soll. Der Trick beruht darauf, dass an die Umgebungsvariable "counter" bei jedem Schleifendurchlauf der Buchstabe "x" angehängt wird, bis die Variable die Zeichenkette "xxxxx" enthält (also 5 Zeichen lang ist).
Batch-Programm vorzeitig beenden
Batch-Programme sollten vor der Ausführung der eigentlichen Befehle die korrekte Eingabe der Parameter oder das Vorhanden von Dateien prüfen und im Fehlerfall abbrechen. Oder Sie wollen während der Testphase an beliebiger Stelle einen Abbruchpunkt setzen. Anstatt jedoch jedesmal mit GOTO-Befehlen an das Ende der Batch-Datei zu springen, sieht ein echter HALT-Befehl nicht nur professioneller aus, sondern ist auch bequemer zu handhaben.
Schreiben Sie folgenden Dummy-Befehl in eine Batch-Datei namens HALT.BAT und speichern Sie sie in einem DOS-Pfad (siehe PATH-Eintrag in autoexec.bat):
@echo off
Um die Ausführung einer Batch-Datei vorzeitig zu beenden, fügen Sie dort folgenden Befehl ein:
Halt
oder, wenn z.B. nur abgebrochen werden soll, wenn ein Kommandozeilen-Parameter fehlt:
if (%1) == () Halt
Batch-Datei für eine bestimmte Zeit anhalten
Es gibt jede Menge Batch-Extender, mit denen man eine Batch-Datei für eine bestimmte Zeit anhalten kann. Aber es geht auch mit DOS-Bordmitteln. Schreiben Sie folgenden Zweizeiler in eine Batch-Datei namens SLEEP.BAT und speichern Sie sie in einem DOS-Pfad (siehe PATH-Eintrag in autoexec.bat):
@echo off
choice /c:xy /t:x,%1 > NUL
Um eine Batch-Datei z.B. für 10 Sekunden anzuhalten, fügen Sie dort folgenden Befehl ein (möglich sind Werte zwischen 0 und 99):
call sleep 10
Quelle: c't
Leer-Datei erzeugen (auch mit "verbotenem" Namen)
Kurz und knapp:
rem > newfile.txt
Windows 9x: Als Webmaster braucht man manchmal eine Datei namens ".htaccess". Windows weigert sich jedoch, eine Datei mit einem führenden Punkt zu erzeugen. Anders die DOS-Box, in der Sie folgenden Befehl eingeben können, dessen Resultat dann auch Windows akzeptiert:
rem > .htaccess
Windows XP: Hier funktioniert der Trick mit dem rem-Befehl nicht mehr. Verwenden Sie statt dessen den echo-Befehl (den Punkt unmittelbar hinter echo nicht vergessen). Die Datei ist allerdings nicht ganz leer, sondern enthält einen Zeilenumbruch.
echo. > .htaccess
ANSI-Code in ASCII-Editor bearbeiten
Texte, die unter Windows erstellt wurden, können in DOS-Editoren wegen der unterschiedlichen Darstellung von Umlauten, ß u.a. nicht vernünftig bearbeitet werden und umgekehrt. Zu diesem Zweck wurde das Freeware-Programm AnsiAsci entwickelt, welches Sie hier downloaden können. Im Downloadpaket finden Sie eine kleine Beispiel-Datei, die aus Ihrem gewohnten ASCII-Editor einen ANSI-Editor macht. Das Prinzip lässt sich auch auf andere Aufgaben übertragen, z.B. könnten Sie mit Ihrem Editor Dateien direkt in komprimierten Archiven editieren - ohne Entpacken und Packen.
Schnellere Datenträger-Zugriffe
Fügen Sie folgenden Befehl in die Datei AUTOEXEC.BAT ein:
LH C:\DOS\SMARTDRV.EXE /X c+ a- b- d
Die Kleinbuchstaben am Ende dieses Befehles stellen die Buchstaben der in Ihrem PC befindlichen Laufwerke dar. "c+" bedeutet, dass Schreib- und Lesezugriffe auf die Festplatte C: von Smartdrv beschleunigt werden sollen. "d" ist in diesem Beispiel ein CD-ROM-Laufwerk. Da von CD nur gelesen werden kann, können auch nur Lesevorgänge beschleunigt werden. Dies wird durch Weglassen von "+" bzw. "-" erreicht.
"a-" und "b-" stellen zwei Disketten-Laufwerke dar. Das
Minuszeichen zeigt an, dass keinerlei Beschleunigung erfolgen
soll. Sinnigerweise wären gerade hier Beschleunigungsmaßnahmen
besonders ergiebig. Leider treten hierbei desöfteren Ablauffehler auf,
die zu Datenverlusten führen können. Wenn überhaupt,
sollten Sie für Diskettenlaufwerke nur Lesevorgänge beschleunigen
lassen (Parameter: /X c+ a b d
).
Wichtig: Schalten Sie den PC niemals durch
Herausziehen des Steckers oder Ausschalten aus, bevor Sie nicht alle
Anwendungsprogramme geschlossen haben und zum DOS-Prompt zurückgekehrt
sind! Neustarts sollten immer mit STRG+ALT+Entf durchgeführt werden.
Andernfalls kann es zu Datenverlusten kommen. Wenn Sie hier ganz sicher gehen
wollen, schalten Sie die Schreib-Beschleunigung für alle
Laufwerke aus. (Parameter /X c a b d
).
Trotz aller Wenns und Abers: Wenn Sie mit großen Datenmengen "hantieren", bringt der Einsatz von SmartDrv erhebliche Leistungsgewinne.
Schneller Booten
Fügen Sie folgenden Befehl in die erste Zeile der Datei CONFIG.SYS ein:
switches=/F
Die Werbepause "Starte MS-DOS..." wird damit auf Null verkürzt.
Der PC als Schreibmaschine
Sicher ist Ihnen folgender Befehl zum Drucken einer Textdatei geläufig:
type datei.txt > prn
Unter DOS gilt jedoch auch die Tastatur als Datei. Der folgende Befehl zur Simulation einer Schreibmaschine wirkt mit einem Nadeldrucker besonders echt.
type con > prn
Um das Blatt am Ende auszuwerfen, halten Sie die ALT-Taste gedrückt und geben Sie auf der numerischen Tastatur die Zahl 012 ein. Drücken Sie dann die Entertaste. Mit der Tastenkombination STRG+Z gelangen Sie wieder ans DOS-Prompt.
Datum und Uhrzeit protokollieren
Mit der folgenden Batch-Datei speichern Sie das aktuelle System-Datum und die Uhrzeit in einer Datei (protocol.txt). Eingesetzt in der Autoexec.bat, können Sie z.B. überprüfen, wann der PC zum letzten mal gestartet wurde - ob also jemand während Ihrer Abwesenheit daran "herumgespielt" hat.
@echo off
echo Letzter Rechner-Start
echo ---------------------
type c:\protocol.txt
echo. | date | find "Gegenwärtig" > c:\protocol.txt
echo. | time | find "Gegenwärtig" >> c:\protocol.txt
Ab Windows 95 ff müssen Sie die beiden letzten Zeilen wie folgt abändern:
echo. | date | find "Aktuell" > c:\protocol.txt
echo. | time | find "Aktuell" >> c:\protocol.txt
Boot-Viren plattmachen
Ein großer Teil der Computer-Viren manipuliert das sogenannte Master-Boot-Record von Festplatten. Um diesen Sektor wieder zu reparieren (also den Virus zu löschen), starten Sie den PC von einer virenfreien und schreibgeschützten Systemdiskette und geben am DOS-Prompt den Befehl:
fdisk /MBR
Das DOS-Programm fdisk.exe muss sich natürlich auf der Systemdiskette befinden.
Editor und Hilfe ohne edit.com und help.com verwenden
Der Hintergrund: Die Befehle Edit und Help verwenden das Programm qbasic.exe. Ohne QBasic funktioniert keiner der beiden Befehle, ohne edit.com und help.com hingegen doch.
statt edit
--> qbasic /EDCOM
statt help
--> qbasic /QHELP
Nur für den Fall, dass die beiden genannten Programme auf Ihrer Systemdiskette fehlen sollten...
Diskette in einem Rutsch formatieren
Das Befehl format fordert Sie mehrmals zu Bestätigungen auf, sodass erst mehrmals die Tastatur betätigt werden muss, ehe format endlich mit dem Formatieren beginnt. Ab MS-DOS 4.0 können Sie diese Abfragen mit dem Parameter /AUTOTEST unterbinden. Um auch sämtliche Bildschirmausgaben zu unterdrücken, verwenden Sie den Parameter /select. In beiden Fällen muss die Diskette bereits im Laufwerk liegen, bevor format gestartet wird.
format a: /AUTOTEST
format a: /select
Falls Sie bei Auftreten eines Fehlers eine Bildschirmmeldung erhalten wollen, sollten Sie den entsprechenden Format-Befehl in eine Batch-Datei eintragen und dort das Errorlevel abfragen.
Leerzeichen in Datei- oder Verzeichnisnamen
Auch unter Good-Old-DOS sind Leerzeichen im Dateinamen möglich. Natürlich dürfen Sie nicht das echte Leerzeichen verwenden, sondern das sogenannte Hex-Blank. Dieses hat den ASCII-Code 255. Um das Zeichen einzugeben, halten Sie die ALT-Taste nieder und geben Sie auf der numerischen Tastatur die Zahl 255 ein.
Unlöschbare Dateien
Kennen Sie das? Mit dem Programm undelete soll eine Datei namens "übermich.txt" wieder hergestellt werden. Undelete fordert Sie zur Eingabe des ersten Buchstabens des Dateinamens auf. Sie drücken Taste ü. Anschließend lässt sich diese Datei weder öffnen und schon gar nicht löschen. Hätten Sie Ü (also einen Großbuchstaben) eingegeben, wäre das Dilemma nicht passiert. Wie nun also diesen Zombie wieder loswerden? Verschieben Sie zunächst alle Dateien mit der Endung TXT in ein anderes Verzeichnis, sodass übermich.txt als einzige übrigbleibt. Dann geben Sie den Befehl:
ren *.txt neuname.txt
Anschließend verschieben Sie die anderen txt-Dateien wieder an ihren angestammten Platz zurück und löschen oder bearbeiten neuname.txt.
Hinweis: Dieser Bug in undelete trifft nicht auf alle DOS-Versionen zu.
Vermeintlicher Bug des copy-Befehles
Bei Verwendung des Befehles copy kommt es hin und wieder vor, dass eine Datei nicht vollständig kopiert wurde. Dies passiert z.B. bei exe-, com- oder ähnlichen Binär-Dateien. Copy ermittelt wie in der PC-Steinzeit das Ende einer Datei anhand einer Ende-Markierung. Exe-Dateien enthalten im Gegensatz zu Text-Dateien jede Menge solcher Datei-Ende-Bytes. Beim Auffinden des ersten dieser Zeichen bricht copy mit dem Kopieren ab. Sie sollten daher generell den Parameter /b einsetzen, der das fehlerfreie Kopieren nach heutigen Regeln erzwingt:
copy /b *.* a:
Wichtig: /b muss immer als erster Parameter angeführt werden.
Nachtrag: bei neueren DOS-Versionen tritt dieser "Fehler" nur
dann auf, wenn copy mehrere Dateien zu einer zusammenkopieren soll, z.B. mit copy datei1+datei2+datei3 datei4
Datei ohne Editor bearbeiten
Verflixt: Rechner von Systemdiskette gebootet, und kein Editor an Bord. Und natürlich auch keine autoexec.bat. Doch zum Editieren einer Textdatei brauchen Sie nicht unbedingt einen Editor. Verwenden Sie einfach den Befehl COPY dazu.
copy con autoexec.bat
copy autoexec.bat+con autoexec.ba_
copy con+autoexec.bat autoexec.ba_
Mit dem ersten Befehl öffnen Sie eine leere Datei namens Autoexec.bat.
In diese Datei kopieren Sie die "Tastatur" (Gerät CON).
Schreiben Sie den Text also ganz normal und beenden Sie Ihre Eingabe mit
der Tastenkombination STRG+Z (CTRL+Z). Beispiel zwei zeigt, wie Sie an eine
bereits existierende autoexec.bat weiteren Text anhängen können
- in Beispiel drei fügen Sie Text am Dateianfang ein. Die dabei
entstehende Datei autoexec.ba_ müssen Sie anschließend noch
umbenennen (ren autoexec.ba_ autoexec.bat
).