SET

Der SET Befehl zeigt in der CMD.exe (Eingabeaufforderung) Umgebungsvariablen an, legt sie fest oder entfernt sie auch. Bei der Verwendung von Set ohne Parameter zeigt Set die aktuellen Umgebungsvariablen Einstellungen an.

Über die möglichen Umgebungsvariablen unter Windows haben wir bereit in unserem Beitrag „Windows Umgebungsvariablen (Benutzerdefiniert, Systemvariablen) bearbeiten“ ausführlich berichtet. Dort erfahrt Ihr auch, wie Ihr die Umgebungsvariablen unter der Windows GUI verändern könnt.

Eine nähere Erklärung der Umgebungsvariablen findet Ihr in unserem Beitrag „Umgebungsvariablen bei Windows„.

Set Befehl & Parameter und Beispiele

Mit dem Set Befehl könnt Ihr Windows Umgebungsvariablen auch Werte zuweisen. Mit dem Befehl

SET Temp=C:\Windows-FAQ\Bilder

weist Ihr der Variable „Temp“ den Ordnernamen „C:\Windows-FAQ\Bilder“ zu.

Mit dem Befehl

set xpath=%path%

weist Ihr der neuen Variable „xpath“ den gesamten Inhalt der „Path“ Variable zu, welches den gesamten Suchpfad für die Suche nach Windows-Systemdateien beinhaltet.

Mit dem Befehl

set /?

wird Euch die umfangreiche Hilfe vom SET Befehl angezeigt. Hier gibt Microsoft auch zahlreiche Beispiele, welche Möglichkeiten Euch noch mit SET zur Verfügung stehen.

SET Befehl

Weitere Informationen zum SET Befehl

SET setzt oder löscht Umgebungsvariablen für CMD.EXE, oder zeigt sie an.

SET [Variable=[Zeichenfolge]]

Die Variable bezeichnet den Namen der Umgebungsvariablen.
Zeichenfolge bezeichnet eine Zeichenfolge, die der Variable zugewiesen werden soll.

Der Befehl SET ohne Parameter zeigt die aktuellen Umgebungsvariablen an.

Wenn die Befehlserweiterungen aktiviert sind, wird SET folgendermaßen
verändert:

Wenn der SET-Befehl mit nur einem Variablennamen aufgerufen wird, d.h.
ohne Gleichheitszeichen oder einem anderen Wert, wird der Inhalt aller
Variablen angezeigt, deren Namen mit eben diesem Buchstaben beginnen. So
werden durch

SET P

alle Variablen angezeigt, die mit dem Buchstaben „P“ beginnen.

Der SET-Befehl legt den ERRORLEVEL mit 1 fest, wenn der Variablenname nicht in der aktuellen Umgebung gefunden wird.

Der SET-Befehl erlaubt kein Gleichheitszeichen als Bestandteil eines
Variablennamens.

Dem SET-Befehl wurden zwei neue Optionen hinzugefügt:

SET /A Ausdruck
SET /P Variable=[EingabeaufforderungZeichenfolge]

Die /A-Option gibt an, dass die Zeichenfolge rechts vom Gleichheitszeichen
ein numerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer Anordnung mit abnehmendem Vorrang:

()                  - Gruppierung
! ~ -               - monäre Operatoren
* / %               - arithmetische Operatoren
+ -                 - arithmetische Operatoren
<< >>               - logische Verschiebung
&                   - bitweise UND
^                   - bitweise exklusives ODER
|                   - bitweise ODER
= *= /= %= += -=    - Zuordnung
&= ^= |= <<= >>=
,                   - Trennzeichen für Ausdrücke

Wenn Sie einen der arithmetischen oder Moduloperatoren verwenden, müssen Sie die Zeichenfolge für den Ausdruck in Anführungszeichen setzen. Alle nicht-numerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen konvertiert werden. Wenn eine Umgebungsvariable angegeben wird, die nicht definiert ist, wird für diese der Wert Null verwendet.

Somit können Sie mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben, um deren Werte zu erhalten. Wenn der Befehl SET /A von der Befehlszeile, d.h. außerhalb eines Befehlsskripts ausgeführt wird, dann zeigt er den endgültigen Wert des Ausdrucks an. Der Zuordnungsoperator erfordert eine Umgebungsvariable auf der linken Seite des Operators.

Numerische Werte stellen immer Dezimalzahlen dar, es sei denn, sie haben ein Präfix 0x für hexadezimale Zahlen, 0b für binäre Zahlen oder 0 für oktale Zahlen. Damit stellt 0x12 dieselbe Zahl wie 18 oder 022 dar. Beachten Sie, dass die oktale Schreibweise verwirrend sein kann: So sind 08 und 09 keine gültigen Zahlen, da 8 und 9 keine erlaubten oktalen Ziffern sind.

Die Option /P ermöglicht es, einer Variablen eine Eingabezeile des Benutzers zuzuweisen und zeigt die angegebene Eingabeaufforderung an, bevor die Eingabezeile gelesen wird. Die Eingabeaufforderung kann leer sein.

Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert:

%PATH:str1=str2%

Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von „str1“ im erweiterten Ergebnis mit „str2“ ersetzt wird. „str2“ kann die leere
Zeichenfolge sein, um alle Instanzen von „str1“ aus der erweiterten Ausgabe zu löschen. Wenn „str1“ mit einem Sternchen beginnt, steht „str1“ für alles
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des übrigen Abschnitts von „str1“.

%PATH:~10,5%

Dies erweitert die PATH-Umgebungsvariable und verwendet dann nur fünf
Zeichen ab dem elften Zeichen (Offset=10) des erweiterten Ergebnisses. Wenn die Länge nicht angegeben ist, wird der Rest des Variablenwerts verwendet. Wenn eine der Zahlen (Offset oder Länge) negativ ist, dann wird der angegebene Wert der Länge des Umgebungsvariablenwerts hinzugefügt.

%PATH:~-10%

extrahiert die letzten 10 Zeichen der Variable PATH.

%PATH:~0,-2%

extrahiert alle, außer den letzten 2, Zeichen der Variable PATH.

Die Unterstützung der verzögerten Erweiterung von Umgebungsvariablen wurde hinzugefügt. Standardmäßig ist sie deaktiviert. Sie kann mit der
Befehlszeilenoption /V von CMD.EXE aktiviert/deaktiviert werden.
Siehe CMD /?

Die verzögerte Erweiterung von Variablen verbessert die Möglichkeiten der
Variablenerweiterung. Bisher wurden die Variablen beim Lesen des Texts, und nicht bei dessen Ausführung, erweitert. Das folgende Beispiel zeigt das Problem mit der unmittelbaren Variablenerweiterung:

set VAR=before
if „%VAR%“ == „before“ (
set VAR=after;
if „%VAR%“ == „after“ @echo Es hat funktioniert!
)

Die Meldung würde nie angezeigt, weil %VAR% in beiden IF-Anweisungen
beim Lesen der ersten IF-Anweisung erweitert wird, da diese logischerweise den Hauptteil der IF-Anweisung enthält, bei der es sich um eine Verbundanweisung handelt. Also vergleicht der
IF-Teil in der Verbundanweisung tatsächlich „before“ mit
„after“, was niemals gleich sein wird. Entsprechend funktioniert auf das folgende Beispiel nicht wie erwartet:

set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%

Es wird KEINE Liste von Dateien im aktuellen Verzeichnis erstellt,
sondern lediglich für die Variable LIST die zuletzt gefundene Datei festgelegt. Auch hier liegt es daran, dass die %LIST% nur einmal erweitert wird, nämlich wenn die FOR-Anweisung gelesen wird, und zu diesem Zeitpunkt ist die Variable LIST leer. Die FOR-Schleife, die tatsächlich ausgeführt wird, ist:

for %i in (*) do set LIST= %i

Dies legt für LIST nur die zuletzt gefundene Datei fest.

Bei der verzögerten Erweiterung von Umgebungsvariablen können Sie ein anderes Zeichen (das Ausrufezeichen) verwenden, um Umgebungsvariablen zur Ausführungszeit zu erweitern. Wenn die verzögerte Variablenerweiterung aktiviert ist, könnten die oben genannten
Beispiele wie folgt geschrieben werden, damit sie wie gewünscht funktionieren:

set VAR=before
if „%VAR%“ == „before“ (
set VAR=after
if „!VAR!“ == „after“ @echo Es hat funktioniert!
)

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

Wenn die Befehlserweiterungen aktiviert sind, gibt es mehrere dynamische
Umgebungsvariablen, die zwar erweiterungsfähig sind, aber nicht in der Liste von Variablen auftauchen, die mit SET angezeigt werden. Diese Variablenwerte werden bei jeder Werterweiterung der Variable dynamisch berechnet. Falls eine Variable mit einem dieser Namen definiert wird, dann überschreibt diese Definition die unten stehende dynamische Definition:

  • %CD% – expandiert zum aktuellen Verzeichnisnamen.
  • %DATE% – expandiert zum aktuellen Datum unter Verwendung desselben Formats wie der DATE-Befehl.
  • %TIME% – expandiert zur aktuellen Zeit unter Verwendung desselben Formats wie der TIME-Befehl.
  • %RANDOM% – expandiert zu einer zufällig gewählten Dezimalzahl
    zwischen 0 und 32767.
  • %ERRORLEVEL% – expandiert zum aktuellen ERRORLEVEL-Wert.
  • %CMDEXTVERSION% – expandiert zur Versionsnummer der aktuellen Erweiterungen für den Befehlsinterpreter.
  • %CMDCMDLINE% – expandiert zur ursprünglichen Befehlszeile, die den Befehlsinterpreter aufgerufen hat.
  • %HIGHESTNUMANODENUMBER% – erweitert zu der höchsten NUMA-Knotennummer auf diesem Computer.

– Netstat – Aufgabe, Funktion und Parameter
– Windows Path Variable
– Net Use Delete – Trennen von Netzwerkverbindungen
– Tracert Befehl – Aufgabe, Funktion und Parameter