716034

Eingabeaufforderung CMD.EXE: Befehlserweiterungen

Problem: Die erweiterten Funktionen von CMD.EXE unter Windows 2000 und XP sind in manchen Fällen durch Inkompatibilität zum DOS-Vorgänger COMMAND.COM erkauft. Dadurch funktionieren manchmal ältere Batchdateien nicht mehr korrekt.

Anforderung

Fortgeschrittener, Profi

Zeitaufwand

Mittel

Problem: Die erweiterten Funktionen von CMD.EXE unter Windows 2000 und XP sind in manchen Fällen durch Inkompatibilität zum DOS-Vorgänger COMMAND.COM erkauft. Dadurch funktionieren manchmal ältere Batchdateien nicht mehr korrekt.

Lösung: Wenn Sie Probleme beim Ausführen alter Batchdateien feststellen, können Sie die Befehlserweiterungen auch abschalten. CMD.EXE verhält sich dann wie unter Windows NT 4. Mit dem folgenden Kommando starten Sie eine Eingabeaufforderung ohne die Befehlserweiterungen:

cmd /e:off

Sollen die Befehlserweiterungen generell deaktiviert sein, sobald Sie eine Eingabeaufforderung öffnen, hilft ein Registry-Eintrag:

Öffnen Sie den Registry-Editor, und gehen Sie zum Schlüssel "Hkey_Current_User\Software\ Microsoft\Command Processor". Hier legen Sie im Wertefenster rechts den DWORD-Wert "EnableExtensions" an, falls er noch nicht vorhanden ist, und geben ihm den Wert "0". Wenn Sie diesen Wert analog unter "Hkey_Local_Machine\Software \Microsoft\Command Processor" erstellen, sind die Befehlserweiterungen für alle Benutzer des Rechners standardmäßig abgeschaltet. Sie können sie für ein einzelnes Fenster wieder aktivieren, indem sie das Kommando "cmd /e:on" verwenden.

Beispielhaft für das Potenzial der Befehlserweiterungen ist der FOR-Befehl, mit dessen Hilfe Sie Befehle über mehrere Dateien in einer Schleife ausführen können. Es stehen Ihnen hier neue Möglichkeiten zur Verfügung, die oft bequemer sind als aufwendigere Techniken wie VB-Script. So kennt der FOR-Befehl mehrere zusätzliche Parameter:

Mit /d stellen Sie sicher, dass statt Dateien nur Verzeichnisse verarbeitet werden. Wollen Sie etwa den Inhalt aller Verzeichnisse anzeigen lassen, die "BAK" als Namensbestandteil enthalten, heißt der entsprechende Befehl

for /d %i in (*bak*) do dir %i

Mit dem Parameter /r durchsucht der FOR-Befehl auch Unterverzeichnisse. Auf das obige Beispiel angewendet, findet folgender Befehl auch alle Unterverzeichnisse, die ein "BAK" enthalten:

for /d /r %i in (*bak*) do dir %i

Der FOR-Befehl kann mit aktivierten Befehlserweiterungen auch unabhängig von Dateinamen zur Schleifenabarbeitung genutzt werden. Dazu dient der Parameter /L, gefolgt von einer Klammer der Form "(<Start >, <Schrittweite >, <Ende >)", die drei Zahlen enthalten muss. So erzeugt eine Klammer "(1, 1, 5)" die Werte 1,2, 3, 4 und 5, die beim Schleifendurchlauf jeweils der Variablen zugewiesen werden.

Der folgende Befehl gibt die Zahlen eins bis fünf aus:

for /L %i in (1, 1, 5) do echo %i

0 Kommentare zu diesem Artikel
716034