Mär 14 2008

Profilbild von Torsten Feld
Torsten Feld

[Tutorial] Batchscripting unter Windows

Veröffentlicht um 14:40 in Tutorials

Da ich grade dieses Thema auch im Rahmen des Unterrichts in der Technikerschule vorgestellt habe, möchte ich dieses auch noch mal bloggen.

Allgemeines

Batch bedeutet so viel wie "Stapel". Das heißt, dass die Befehle innerhalb des Batchscripts gestapelt werden. Dabei ist darauf zu achten, dass jeder Befehl in einer eigenen Zeile steht. Ausnahmen hierbei sind z.B. if-Anweisungen oder for-Schleifen. Befehle innerhalb der Batchdatei werden grundsätzlich nacheinander und nicht zeitgleich ausgeführt, so dass er nächste Befehle erst ausgeführt wird, wenn der Aktuelle abgeschlossen ist.

Mit Hilfe von "help" können sämtliche Befehle in der Konsole aufgelistet werden.

Im Gegensatz zu Linux oder Unix sind die CMD-Befehle und Variablen innerhalb der Scripte nicht Case-sensitiv. Das bedeutet, dass die Befehle und Variablen sowohl mit Groß- und Kleinbuchstaben geschrieben werden können. Der Variablenname "meinName" ist somit gleichbedeutend mit "Meinname". Ausnahme hierbei sind Zählvariablen, wie sie z.B. in Schleifen verwendet werden. %a% und %A% sind somit unterschiedlich.

Ausgaben

Um die Ausgaben der Befehle (z.B. die Verzeichnisstruktur, welche mittels "dir" ausgegeben wird) in Dateien oder Drucker umzuleiten, hat man die Möglichkeit Ausgabe- bzw. Umleitungsoperatoren zu verwenden.

  • "Befehl > Dateiname.txt"
    leitet die Ausgabe, welche vom Befehl erzeugt wird in die Datei "Dateiname.txt" um. Ist die Datei noch nicht vorhanden, wird sie erstellt; ist sie bereits vorhanden, wird sie überschrieben.
  • "Befehl >> Dateiname.txt"
    funktioniert ähnlich wie die Umleitung mit ">", hängt die Ausgabe jedoch an die Datei "Dateiname.txt" an, ohne sie zu überschreiben.
  • "Befehl < Dateiname.txt"
    hier werden die Inhalte der Datei "Dateiname.txt" als Parameter an den Befehl übergeben und somit verarbeitet.
  • "Befehl1 | Befehl2"
    die Ausgabe von "Befehl1" wird als Parameter an "Befehl2" übergeben, so dass dort mit den Ergebnissen von "Befehl1" weitergearbeitet werden kann.

Verknüpfungen

Verknüpfungen werden dazu benutzt, um Befehle in Abhängigkeit zur erfolgreichen Ausführung des vorangegangenen Befehls auszuführen.

  • A & B
    beide Anweisungen werden auf jeden Fall ausgeführt, egal ob "A" ausgeführt wurde oder nicht.
  • A && B
    B wird nur ausgeführt, wenn A keinen Fehler geworfen hat
    (Bsp.: Wenn A ein Befehl zur Sicherung von Dateien ist und B dazu dient, diese Sicherung auf ein Sicherungsmedium zu kopieren, braucht B nicht ausgeführt werden, wenn die Sicherung A fehlgeschlagen ist.)
  • A || B
    B wird nur ausgeführt, wenn A einen Fehler geworfen hat
    (Bsp.: Befehl B dient dazu, Fehler zu protokollieren. Nur wenn der Befehl A fehlschlägt, wird B ausgeführt und der Fehler von A protokolliert.)

Variablen

Um Variablen zu setzen wird der Befehl "SET" benutzt. Die Syntax dafür ist "SET Variablenname=Wert". Um Variableninhalte zu löschen wird der Variablen einfach kein Wert zugewiesen. Möchte man sich alle Variablen (inkl. der Systemvariablen) anzeigen lassen, nutzt man den Befehl "SET" ohne weitere Parameter. Um sich nur bestimmte Variablen anzeigen zu lassen, verbindet man den Befehl "SET" mit dem dem Prä- oder Postfix der Variablen, die man sich ansehen möchte. Um sich den Variableninhalt anzeigen zu lassen, kann man den echo-Befehl zu nutzen.

Beispiele

  • setzen / ändern:
    „SET meinName=Torsten“
  • löschen:
    „SET meinName=“
  • anzeigen (alle):
    „SET“
  • anzeigen (alle mit Präfix „mein“):
    „SET mein“
  • ausgabe:
    „echo meinName“

Script für gruppenbasierte Netzlaufwerke

Voraussetzungen

  • ifmember.exe aus dem Windows Ressource Kit
  • ifmember.exe und Script in NETLOGON-Freigabe des DC

Script

@echo off

net use S: /DELETE

IFMEMBER abteilung1
    if %errorlevel%==1
    (net use S: \\FQDN\freigabe\abteilung1 /persistent:no )
IFMEMBER abteilung2
    if %errorlevel%==1 
    (net use S: \\FQDN\freigabe\abteilung2 /persistent:no )
IFMEMBER abteilung3
    if %errorlevel%==1 
    (net use S: \\FQDN\freigabe\abteilung3 /persistent:no )
IFMEMBER abteilung4
    if %errorlevel%==1
    (net use S: \\FQDN\freigabe\abteilung4 /persistent:no )
IFMEMBER Administratoren
    if %errorlevel%==1
    (net use S: \\FQDN\freigabe\edv /persistent:no )

Erklärung

  • @echo off
    sorgt dafür, dass die "Eingaben", welche vom Script getätigt werden, nicht in der Ausgabe erscheinen
  • net use <Laufwerksbuchstabe>: /delete
    grundsätzlich sollten die Laufwerksbuchstaben bzw. die mit ihnen verbunden Netzlaufwerke getrennt werden.
  • IFMEMBER abteilung1
    mit Hilfe des Tools "ifmember" wird überprüft, ob der Benutzer, unter welchem das Script ausgeführt wird, in der Gruppe "abteilung1" ist.
  • if %errorlevel%==1
    wenn das zuvor ausgeführt Tool "ifmember" den Wert "true" (1) zurückliefert, wird die nachfolgende Anweisung ausgeführt, ansonsten wird sie übersprungen.
  • (net use S: \\FQDN\freigabe\abteilung1 /persistent:no )
    wenn die IF-Anweisung erfüllt ist, wird der Laufwerksbuchstabe S: mit dem entsprechenden Netzlaufwerk verbunden.
    Der Parameter "/persistent:no" sorgt dafür, dass das Netzlaufwerk beim nächsten Systemstart nicht automatisch erneut verbunden wird.

Wer von meinen Kommilitonen schlau genug war, mal ein Blick auf meine Seite und diesen Artikel zu werfen kann sich die Hausaufgaben sparen und die "Musterlösung" nahezu 1:1 abschreiben. ;)

2 Antworten bisher

2 Kommentare to “[Tutorial] Batchscripting unter Windows”

  1. scara sagt:

    Perfekte site einzige is ein bissle kurz gehalten!
    Das versteht sogar ein dau ;-)

  2. Torsten Feld sagt:

    Danke. Freut mich, dass es Dir gefällt.

Trackback URI | Comments RSS

Hinterlasse einen Kommentar

Bitte Kommentare nur in deutscher oder englischer Sprache verfassen. Kommentare in anderen Sprachen werden automatisch gelöscht.
Please comment in german and english only. Other languages will be deleted automatically.

XHTML: Du kannst folgende Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Kommentare abonnieren ohne selbst einen Kommentar abzugeben:

Translator

German flagItalian flagKorean flagChinese (Simplified) flagChinese (Traditional) flagPortuguese flagEnglish flagFrench flagSpanish flagJapanese flagRussian flagGreek flagDutch flagCzech flagCroat flagDanish flagFinnish flagSwedish flagNorwegian flagCatalan flagUkrainian flag
By N2H

Trigami Affiliate
Willis Blog