Batch-Programmierung: Erweiterungen unter Windows NT
Aus Wikibooks
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".
[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%
- siehe auch Net-Befehle