Batch-Programmierung: Erweiterungen unter Windows NT

Aus Wikibooks

Wechseln zu: Navigation, Suche

Unter Windows NT, Windows 2000 und Windows XP stehen einige weitere Befehle zur Verfügung, zum Teil sind dort auch erweiterte Optionen für Standard-Befehle enthalten.

Inhaltsverzeichnis

[Bearbeiten] Batchparameter

Die Parameter lassen sich jetzt folgendermaßen erweitern (für 1 setze man den jeweiligen Parameter ein):

%~1  Anführungszeichen (") werden entfernt
%~f1 vollständige Pfadbezeichnung
%~d1 Laufwerkbuchstabe 
%~p1 Pfad (ohne Laufwerksbuchstabe)
%~n1 Dateiname
%~x1 Dateinamenserweiterung 
%~s1 Pfad nur mit kurzen Verzeichnis/Dateinamen (8.3-Konvention)
%~a1 Dateiattribute
%~t1 Datums- und Uhrzeitangaben der Datei (Geändert am)
%~z1 Größe der Datei

Die Angaben können auch kombiniert werden, z.B. %~dp0 ist Laufwerksbuchstaben + Pfad der aktuellen Batchdatei.

[Bearbeiten] Stringmanipulation

Mit folgender Syntax lassen sich Teile aus einer Zeichenkette extrahieren:

set str=Hallo
set str=%str:~1%
echo.%str%

Die angegebene positive Zahl gibt an, wie viele Zeichen links übergangen werden sollen. Dieser Ausdruck liefert daher den Teilstring "allo" von "Hallo".

set str=Hallo
set str=%str:~-4%
echo.%str%

Wird eine negative Zahl eingesetzt, so gibt ihr Betrag an, wieviele Zeichen von rechts genommen werden sollen. Dieser Ausdruck liefert daher ebenfalls "allo".

Über die Angabe einer zweiten Zahl kann definiert werden, was mit dem Rest nach Auswertung der ersten Zahl entsprechend obiger Regeln geschehen soll. Während die erste Zahl die Zeichenkette links beschneidet, beschneidet die zweite Zahl sie rechts und zwar nach folgenden Regeln:

set str=Hallo
set str=%str:~1,2%
echo.%str%

Eine positive zweite Zahl gibt an wie viele Zeichen ab links vom Rest genommen werden sollen. Dieser Ausdruck liefert daher "al".

set str=Hallo
set str=%str:~1,-2%
echo.%str%

Wird eine negative zweite Zahl eingesetzt, so gibt ihr Betrag an, wie viele Zeichen vom Rest ab rechts übergangen werden sollen. Dieser Ausdruck liefert daher ebenfalls "al".

Möchte man beispielsweise nur einen Teil der Zeichenkette ab links, so ist nach diesen Regeln als erste Zahl eine Null anzugeben:

set str=Hallo
set str=%str:~0,2%
echo.%str%

Dieser Ausdruck liefert daher "Ha".

Mehr zu Stringmanipulation

[Bearbeiten] Umgebungsvariablen

Unter DOS und Windows 9x/ME speichern alle Anwendungen und Skripte ihre Umgebungsvariablen in der gleichen Umgebung. Unter Windows NT-basierten Betriebssystemen ist dies etwas anders:

Zunächst gibt es einen systemweiten Bereich. Dieser enthält Variablen, die für alle Benutzer und alle Anwendungen zugänglich sind. Zusätzlich hat jeder Benutzer seinen eigenen Variablenraum. Jede Anwendung, die nun vom System gestartet wird, erhält einen eigenen Variablenraum, der als Kopie aus dem der aufrufenden Anwendung erzeugt wird. Ändert das Programm etwas (Wertänderung, neue Variable), wirkt sich dies nicht auf parallel gestartete Anwendungen oder das System aus. Lediglich Prozesse, die von der Anwendung gestartet werden erhalten eine Kopie des Anwendungsvariablenraumes. Dadurch ist es nicht möglich, dass Anwendungen Umgebungsvariablen setzen, die dann anschließend in einer Batchdatei verwertbar sind.

Beispiel:

@echo off
set a=2
echo %a%
command /c: set a=1
echo %a%

Unter Dos würde die Ausgabe lauten:

2

1

Unter Windows NT/2000/XP:

2

2

Das heißt nicht, dass unter Windows NT und Nachfolgern der Befehl set a=1 keinen Effekt hätte, sondern dieser wird in einer geschützten Umgebung ausgeführt, die dann außerhalb dieser Umgebung keinen Effekt mehr hat. Für die aufgerufene Variante von command ist a nach dem set-Befehl sehr wohl gleich 1.

Noch eine Änderung Variablen betreffend.

[Bearbeiten] Die Kommandozeile lernt Rechnen

Seit Windows NT 4 kann man mit dem set Befehl auch Rechnen.


Ein Beispiel:

set /a 1+2
3

Man kann das Ergebnis auch in Variablen schreiben:

set /a n=5+5
10
echo %n%
10

- CMD nimmt folgendes entgegen (Auszug aus der Hilfe):

    ()                  - Gruppierung
    ! ~ -               - unäre Operatoren
    * / %               - arithmetische Operatoren (% bedeutet Modulo)
    + -                 - arithmetische Operatoren
    << >>               - logische Verschiebung
    &                   - bitweise UND
    ^                   - bitweise exklusives ODER
    |                   - bitweise ODER
    = *= /= %= += -=    - Zuordnung

- Mit Klammern:

set /a (1+1)*(4-3)
2

[Bearbeiten] Benutzereingaben

Seit Windows 2000 kann man mit dem set Befehl auch Eingaben abfragen:

Syntax:

set /p {variablenname}={Angezeigter Text}


[Bearbeiten] Beispiel

@echo off
set /p var=Eingabe: 
echo Sie haben %var% eingegeben.
pause

Ausgabe:

Eingabe: Test
Sie haben Test eingegeben.
{Pause}

Prüfung ob der Benutzer Text eingegeben hat:

@echo off
set /p var=Eingabe: 
if not defined var (
  echo Bitte geben sie etwas ein!
  set var=nichts
  REM Könnte auch was ganz anderes sein
)
echo Sie haben "%var%" eingegeben.
pause

Ausgabe:

Eingabe: {leer}
Bitte geben sie etwas ein!
Sie haben "nichts" eingegeben.
{pause}

[Bearbeiten] Ausgaben in eine Variable umleiten

Eine Möglichkeit der Umleitung einer Ausgabe besteht über den set /p Befehl:

Syntax:

ECHO {Befehl}> {Dateiname}
SET /P {Variablenname}=<{Dateiname}

[Bearbeiten] Beispiel

@ECHO OFF
ECHO %date% > _.txt
SET /P tmp=<_.txt
ECHO Das Datum heute ist: %tmp%


Persönliche Werkzeuge