Facebook Twitter Flickr YouTube E-mail RSS
Home Tutorials Windows Kommandozeile (Teil 3)
formats

Windows Kommandozeile (Teil 3)

Ausgestellt am 4. März 2012 vom in Tutorials

Jetzt geht’s ans Eingemachte! Nachdem wir in Teil 1 & 2 dieses Tutorials sozusagen die Grundlagen der XP-Textbefehle kurz umrissen haben, wollen wir nun damit im Rahmen der Möglichkeiten „programmieren“. Und diese Möglichkeiten sind gar nicht so gering, wie man vermuten würde…. lasst euch überraschen!


Batches
Das Gefäss für unsere Programme sind Batch-Dateien, wie sie schon zu frühesten DOS-Zeiten benutzt wurden. In XP sind das sowohl Dateien mit der alten Endung .bat als auch solche mit der Endung .cmd. Beide sind aber genau das selbe, nämlich simple Textdateien, in denen eine Reihe von Kommandozeilenbefehlen nacheinander aufgeführt sind.
Das Erstellen einer Batch-Datei ist also denkbar einfach:
1. Eine neue txt-Datei erstellen
2. öffnen (mit dem Notepad! MS Word beispielsweise setzt, wenn falsch eingestellt, versteckte Formatangaben in das txt-file, mit denen XP nachher beim Ausführen unseres Programms nichts anfangen kann)
3. Befehle hineinschreiben (neuer Befehl = neue Zeile)
4. speichern, Datei in Blablabla.bat oder Blablabla.cmd umbenennen. Fertig!
5. ausgeführt wird unser Progi dann entweder mit dem Befehl „Blablabla“ in der Kommandozeile oder einfach mit einem Doppelklick auf die Batch-Datei. Piece of cake!

Grundsätzliches
Da alle Kommandozeilenbefehle im Ordner X:\Windows\system32 vorliegen, und dieser Ornder standardmässig in den Umgebungsvariablen von Windows als „Ort der Programme“ (etwas salop gesagt) definiert ist, können die Batches von jedem beliebigen Ort auf eurer Platte gestartet werden, Windows findet dann die Befehle schon. Das heisst aber auch, dass ihr, wenn Ihr eine selbstgemachte Batch in einer neuen Batch als Befehl aufrufen wollt (dazu später mehr), sie am besten auch im system32-Ordner ablegt, damit sie auch gefunden wird. Achtet dabei auf die Namensgebung! Vermeidet es, Batches gleich wie andere Befehle zu benennen. Beispielsweise würde user.exe den Vorzug vor user.bat erhalten, wenn ihr user aufruft. Etwas Kreativität bei der Namensgebung vermeidet also Probleme.

Werkzeug (1)
Das Grundlegende an den Batches sind natürlich die Windowsbefehle, wie sie in Teil 1 & 2 dieses Tutorials beschrieben werden. Nun gibt es aber noch einige Befehle, die es erlauben, etwas zu programieren; denjenigen, die sich schon mal mit BASIC oder etwas vortschrittlicheren Programmiersprachen beschäftigt haben, dürften sie ohne Zweifel bekannt vor kommen. Ich werde versuchen, deren Funktionen so gut wie möglich zu beschreiben…. weiteres gibt es auch dazu wieder in der „Befehlszeilenreferenz von A-Z“ in der Windowshilfe.

call
Dieser Befehl ruft innerhalb einer Batchdatei eine andere Batchdatei auf. So könnt ihr eure eigenen Kreationen in neuen Batches wieder verwenden, eine wesentlich handlichere Methode, als den Code der alten Batch in die neue einzufügen. Steht zum Beispiel an 3. Zeile eures programs call Hampelmann.bat, so wird, nach dem ausführen der Befehle in Zeile 1&2, Hampelmann.bat ausgeführt; erst wenn dieses Programm seine Aufgaben erfüllt hat, geht es weiter mit Zeile 4.

echo
Mit diesem Befehl könnt ihr Meldungen ausgeben oder Ausgaben von Befehlen unterdrücken. Die Zeile echo Hallo gibt also ein einfaches Hallo im Windows-Kommandofenster aus. Steht am Anfang der Batch echo off, wird gar nichts angezeigt, innerhalb der Programs könnt ihr aber das ganze wieder einfach mit echo on einschalten. Zusätzlich kann man mit @echo off die Ausgabe einzelner Befehle unterbinden. Steht also beispielsweise in Zeile 4 @echo off, wird nur die Ausgabe des Befehls in Zeile 5 unterdrückt.

pause
…ist quasi selbsterklärend. steht pause in eurem program, hält es dort an, gibt „Drücken Sie eine beliebige Taste“ aus und wartet, bis eben dieses geschieht. Dann gehts weiter mit der nächsten zeile.
Anmerkung: der pause-befehl empfielt sich vor allem am Ende von batches, die ihr per Doppelklick der maus ausführen wollt. Denn sonst springt das Kommandofenster auf, rattert das Program durch und schliesst sich gleich wieder, ohne dass ihr Gelegenheit hattet, euch die Ausgaben eures Progis anzusehen.

rem
Der heilige Gral aller alten autoexec.bat-tweaker! der rem-befehl weisst Windows an, diese Zeile zu ignorieren. Sinnlos?…. Gar nicht! Erstens könnt ihr so Bemerkungen für euch selbst in den bat’s verfassen, was bei grösseren Programmen die Übersichtlichkeit enorm verbessern kann, andererseits könnt ihr so einzelne Befehle aus dem Program herausnehmen, ohne die mühsam ertippte Zeile gleich löschen zu müssen. Steht also beispielsweise rem copy C:\Start\*.* C:\Ziel geschieht dort gar nichts, durch einfaches entfernen des rem’s habt ihr den Befehl allerdings gleich wieder im Program.

Variablen
Bevor wir zu den weiteren Werkzeugen kommen, müssen wir erst den Umgang mit Variablen betrachten (Für die Noobs: Variablen sind Platzhalter für x-beliebige Zeichenfolgen ).
Als erstes sehen wir und mal die Parameterübergabe an. Wie ihr aus Tut 1&2 wisst, haben fast alle Befehle Parameter, die man Ihnen auf den Weg mitgeben kann; wie zum Beispiel der Parameter /all für den Befehl ipconfig. Nun könnt ihr solche Parameter auch euren Batches mitgeben, und diese sind glücklicherweise immer gleich zu handhaben. Ein Beispiel soll’s erklären:
Ich habe eine Batchdatei gemacht, die alles von Dort nach Da kopieren soll, aber für die ausführung natürlich einen Quell- und einen Zielpfad braucht. Dieses Program nenn ich hier mal Bruno.bat. Ausgeführt wird Bruno nun folgendermassen: Bruno C:\Quelle D:\Ziel … die Leerschläge trennen jeweils die Parameter. Innerhalb meiner Batch hab ich nun folgendes: %1 is meine erste Variable, in diesem Fall mit dem Inhalt „C:\Quelle“, %2 die Zweite mit dem Inhalt „D:\Ziel“…. Ihr seht wie’s läuft…. die Parameter werden fortlaufend nummeriert. Ausserdem haben wir noch eine Variable %0 mit dem Inhalt (ihr werdet’s erraten) „Bruno“, unserem eingegebenen Befehl. In Bruno.bat steht folgendes:
xcopy %1/*.* %2
Zugegeben, ein ziemlich dämliches Beispiel, man hätte statt unseren Bruno auch einfach xcopy ausführen können. Aber es ging ja um die Parameter

SET
Natürlich können wir innerhalb unserer Batch auch selber Variablen erstellen und mit ihnen auch rechnen. Dafür gibts den SET-Befehl. Hierbei gilt es zwei Variabel-Typen zu unterscheiden. Zum einen die Zeichenfolge, wie sie in unserem oben gezeigten Beispiel „Bruno“ verwendet wurden. So würde beispielsweise die Zeile set Ziel=%2 bewirken, dass wir eine Variable mit Namen „%Ziel%“ erstellen, die den Inhalt von %2, in unserem Fall also „D:\Ziel“ hat. Das mag jetzt sinnlos aussehen, da wir doch dann auch gleich mit der Variabel %2 arbeiten könnten anstatt mit %Ziel%, doch es gibt ein paar Funktionen, die mit den Parametervariablen %0, %1, etc nicht funtionieren.
Der Zweite Typ ist der Arithmetische Ausdruck, also eine Rechenanweisung, deren Ergebnis dann in der neu erstellten Variabel gespeichert wird. Um dies dem Compi klarzumachen, muss der set-Befehl zusätzlich den Parameter /a erhalten. ein Beispiel: angenommen, den folgenden Variablen hätten wir über Eingabeparameter bereits Werte zugeordnet: x, Y, Z. Jetzt können wir mit Ihnen rechnen, in dem wir in unserem Program Beispielsweise schreiben:
set /a Ergebnis=(%X%+%Y%)*%Z%
So haben wir das ergebnis der rechnung (X+Y)*Z in der Variabel „Ergebnis“ gespeichert. Ein einfaches echo %Ergebnis% würde uns dann die Lösung ausspucken. Wie Ihr seht, müsst Ihr, um an den Inhalt einer Variabeln zu gelangen, den Namen der Variablen zwischen zwei „%“ klemmen. Für eine Liste aller Infos zum set-Befehl (inklusive aller möglichen Rechenoperationen) gebt einfach set /? in die Kommandozeile ein. Heftig, gelle?
Wichtig vielleicht noch dies: Angenommen wir haben die Variable „AA“ mit dem Inhalt „167C5479RT“. Ich schreibe die Zeile
set /a AB=%AA:~5,3%
Das Anhängsel „:~x,y“ weisst XP an, bei der Variabel erst an Stelle x anzufangen und nur y Zeichen zu beachten. Demnach hat unsere neue Variabel „AB“ den Wert „547“.

Umgebungsvariabeln
Windows bringt von Haus aus schon eigene Variabeln mit, die in Programme eingebaut werden können. Eine Liste von Ihnen bekommt Ihr, wenn Ihr einfach „set“ ohne jegliche Parameter in die Kommandozeile schreibt. So werdet Ihr da beispielsweise die wichtige variable „sytemroot“ finden. Wollt ihr nun den darin gespeicherten Pfad in eurem Programm verwenden, müsst ihr natürlich den Ausdruck „%systemroot%“ verwenden. (Vgl. dazu Tutorial Teil 1; Auf die Plätze, Fertig….tippen; Punkt 1)

Ordnung muss sein
Damit Ihr nicht aus Versehen noch in den Umgebungsvariablen eurer Windows-Installation herumfuhrwerkt und damit noch was kaputt macht, emphiehlt sich in Batches, in denen Variablen gehandhabt werden, immer ZUERST FOLGENDEN BEFEHL EINZUFÜGEN:
setlocal
Dieser Befehl bewirkt, dass alle Variabeln nur wärend des Ausführens der Batch gelten, und nachher mit den (falls vorhanden) alten Werten wieder gefüllt werden. „setlocal“ kann mit „endlocal“ aufgehoben werden, ist aber am ende einer Batch, die vorher „setlocal“ enthält, nicht nötig. Windows erledigt das selbst.

Werkzeug (2)
So, genug Vorgeplänkel, jetzt gehts zu den wichtigen Dingen.

IF & ELSE
Wenn (if) dies der fall ist, tu das, andernfalls (else) mache jenes. So einfach ist das…..fast. Ein Beispiel zum syntax (eine Zeile!):
if „%AB%“==“3“ (echo stimmt) else echo stimmt nicht
Diese Zeile tut also folgendes: Wenn der Inhalt der Variable AB drei ist, gibt das Programm pragmatisch „stimmt“ aus, ist dies nicht der Fall teilt es uns „stimmt nicht“ mit. Der if-Befehl muss kein „else“ haben, man könnte genau die selbe Aufgabe auch mit folgendem 2-Zeiler lösen:
if „%AB%“==“3“ echo stimmt
if not“%AB%“==“3″ echo stimmt nicht
Und damit haben wir einen weiteren Zusatz des if-befehls gesehen: Die Bedingung „wenn dies der fall ist“ kann mit einem „NOT“ ganz einfach in die Bedingung „wenn dies NICHT der Fall ist“ umgewandelt werden. Ein weiteres Feature des if-Befehls ist:
EXIST
Ein Beispiel: Wenn Datei „test.txt“ existiert, soll meine Batch diese bitte löschen, andernfalls soll sie mir sagen, dass die Datei nicht existiert. Folgende Zeile tut dies:
IF EXIST test.txt (del test.txt) ELSE echo test.txt fehlt
Bedingungen gehen nicht nur mit „==“, also einer genauen entsprechung sondern auch mit folgenden Ausdrücken:
Weitere infos zu if/else gibt es wie immer, wenn man if /? in die Kommandozeile eingibt.

GOTO
Der Zeilenhüpfer. Mit dem Befehl „goto“ kann man an eine definiert Stelle in der Batch springen. Diese Zeilen werden mit einem „:Name“ gekenntzeichnet. Ein seeeehr simples Beispiel (2-Zeiler):
:Ziel
goto Ziel
Wie nicht schwer zu erkennen ist, handelt es sich bei diesem Beispiel um eine Endlosschlaufe, der Befehl goto schickt das Program ständig wieder eine Zeile vor sich selbst……ziemlich fies. Um aus einem Batch nun auszusteigen, auch wenn noch Code folgt, gibt es den
EXIT
-Befehl. Vorsicht, wenn exit ohne Parameter ausgeführt wird, schliesst er gleich das ganze Kommandofenster. Um aber eine Batch zu beenden, muss exit /b aufgerufen werden.

FOR & DO
Solange (for) das der Fall ist, tue (do) das. Eigentlich ganz simpel, doch Optionen gibt’s ne ganze Menge… überzeugt euch mit der Eingabe von for /? in die Kommandozeile. Da die meisten FOR-Probleme auch mit einer Zählvariable, einem GOTO und einem IF gelöst werden können (korrigiert mich, wenn ich da falsch liege), belasse ich’s hierbei. Wer’s bis hierher geschafft hat (ohne einzuschlafen ), dürfte auch mit den „for /?“-infos was anfangen können….

 
No Comments  comments