Suche…


Erklärung

Um eine einfache Variable zu erstellen und sie einem Wert oder einer Zeichenfolge zuzuordnen, verwenden Sie den SET Befehl:

SET var=10

Hier deklariert der Code eine neue Variable var mit einem Wert von 10 . Standardmäßig werden alle Variablen intern als Zeichenketten gespeichert. Dies bedeutet, dass sich der Wert 10 nicht von foo1234 oder Hello, World!

Hinweise zu Anführungszeichen

Verwendete Anführungszeichen werden in den Wert der Variablen eingefügt:

SET var="new value"             <-- %var% == '"new value"'

Leerzeichen in Variablen

Batch-Sprache betrachtet Leerzeichen als akzeptablen Bestandteil von Variablennamen. Zum Beispiel führt set var = 10 zu einer Variablen namens var , die den Wert 10 enthält (beachten Sie den zusätzlichen Platz rechts von var und links von 10).

Verwenden Sie Anführungszeichen, um Leerzeichen zu entfernen

Um Leerzeichen zu vermeiden, setzen Sie die gesamte Zuweisung in Anführungszeichen. Name und Wert der Variablen. Dadurch werden auch unbeabsichtigte Leerzeichen am Ende der Zeile verhindert (das Zeichen für ein Leerzeichen):

SET␣var=my␣new␣value␣           <-- '%var%' == 'my new value '
SET␣"var=my␣new␣value"␣         <-- '%var%' == 'my new value'

Verwenden Sie auch Anführungszeichen, wenn Sie mehrere Anweisungen mit & oder | - Alternativ können Sie das Symbol direkt nach dem Ende des Variablenwerts einfügen:

SET var=val & goto :next        <-- '%var%' == 'val '
SET "var=val" & goto :next      <-- '%var%' == 'val'
SET var=val& goto :next         <-- '%var%' == 'val'

Verwendungszweck

echo %var%

Dieser Code gibt den Wert von var

Wenn setLocal EnableDelayedExpansion verwendet wird, wird der Wert von var setLocal EnableDelayedExpansion (der Standardausdruck% var% funktioniert in diesem Kontext nicht).

echo !var!

In Batchdateien können Variablen in jedem Kontext verwendet werden, einschließlich als Teile von Befehlen oder als Teile anderer Variablen. Sie dürfen eine Variable nicht vor der Definition aufrufen.

Verwenden von Variablen als Befehle:

set var=echo
%var% This will be echoed

Verwendung von Variablen in anderen Variablen:

set var=part1
set %var%part2=Hello
echo %part1part2%

Variable Ersetzung

Im Gegensatz zu anderen Programmiersprachen wird eine Variable in einer Stapeldatei durch ihren tatsächlichen Wert ersetzt, bevor das Stapelskript ausgeführt wird. Die Ersetzung erfolgt also, wenn das Skript vom Befehlsprozessor in den Speicher eingelesen wird , nicht wenn das Skript später ausgeführt wird .

Dies ermöglicht die Verwendung von Variablen als Befehle innerhalb des Skripts und als Teil anderer Variablennamen im Skript usw. Das "Skript" ist in diesem Zusammenhang eine Zeile oder ein Block von Code, umgeben von runden Klammern: () .

Dieses Verhalten bedeutet jedoch, dass Sie den Wert einer Variablen nicht innerhalb eines Blocks ändern können!

SET VAR=Hello
FOR /L %%a in (1,1,2) do (
    ECHO %VAR%
    SET VAR=Goodbye
)

wird drucken

Hello
Hello

da (wie Sie sehen, wenn Sie das Skript im Befehlsfenster ausführen), es ausgewertet wird:

SET VAR=Hello
FOR /L %%a in (1,1,2) do (
    echo Hello
    SET VAR=Goodbye
)

In dem obigen Beispiel wird der ECHO - Befehl wird als ausgewertet Hello , wenn das Skript in den Speicher geladen wird, so wird das Skript echo Hello für immer, aber viele Pässe durch das Skript vorgenommen werden.

Um das "traditionelle" Variablenverhalten (der Variablen, die bei laufendem Skript erweitert werden) zu erreichen, können Sie die "verzögerte Erweiterung" aktivieren. Dazu müssen Sie diesen Befehl vor der Schleifenanweisung (normalerweise eine FOR-Schleife in einem Batch-Skript) in das Skript einfügen und ein Ausrufezeichen (!) Anstelle eines Prozentzeichens (%) im Namen der Variablen verwenden:

setlocal enabledelayedexpansion 
SET VAR=Hello
FOR /L %%a in (1,1,2) do (
    echo !VAR!
    SET VAR=Goodbye
)
endlocal

wird drucken

Hello
Goodbye

Die Syntax %%a in (1,1,2) bewirkt, dass die Schleife zweimal ausgeführt wird: Beim ersten Mal trägt die Variable ihren Anfangswert 'Hello', aber beim zweiten Durchlauf der Schleife - nachdem der zweite ausgeführt wurde SET-Anweisung als letzte Aktion beim 1. Durchlauf - dies hat sich in den überarbeiteten Wert 'Goodbye' geändert.

Erweiterte Variablensubstitution

Nun eine fortgeschrittene Technik. Mit dem Befehl CALL kann der Stapelverarbeitungsprozessor eine Variable erweitern, die sich in derselben Zeile des Skripts befindet. Dies kann durch wiederholte Verwendung von CALL und Modifikatoren zu einer Erweiterung auf mehreren Ebenen führen.

Dies ist beispielsweise in einer FOR-Schleife hilfreich. Wie im folgenden Beispiel haben wir eine nummerierte Liste von Variablen:

"c:\MyFiles\test1.txt" "c:\MyFiles\test2.txt" "c:\MyFiles\test3.txt"

Dies erreichen wir mit folgender FOR-Schleife:

setlocal enabledelayedexpansion
for %%x in (%*) do (
    set /a "i+=1"
    call set path!i!=%%~!i!
    call echo %%path!i!%%
)
endlocal

Ausgabe:

c:\MyFiles\test1.txt
c:\MyFiles\test2.txt
c:\MyFiles\test3.txt

Beachten Sie, dass die Variable !i! wird zuerst auf den ursprünglichen Wert 1 erweitert, dann wird die resultierende Variable% 1 auf ihren tatsächlichen Wert von c:\MyFiles\test1.txt . Dies ist eine doppelte Erweiterung der Variablen i . In der nächsten Zeile wird i erneut doppelt erweitert, indem der Befehl CALL ECHO zusammen mit dem Präfix %% wird. Anschließend wird er auf den Bildschirm gedruckt (dh auf dem Bildschirm angezeigt).

Bei jedem nachfolgenden Durchlauf durch die Schleife wird die Anfangszahl um 1 erhöht (aufgrund des Codes i+=1 ). Beim zweiten Durchlauf durch die Schleife steigt sie auf 2 und beim 3. Durchgang auf 3 . Somit wird die Zeichenfolge mit jedem Durchlauf auf dem Bildschirm angezeigt.

Mehrere Variablen deklarieren

Wenn am Anfang des Stapels mehrere Variablen definiert sind, kann ein kurzes Definitionsformular verwendet werden, indem eine Ersetzungszeichenfolge verwendet wird .

@echo off
set "vars=_A=good,_B=,_E=bad,_F=,_G=ugly,_C=,_H=,_I=,_J=,_K=,_L=,_D=6
set "%vars:,=" & set "%"

for /f %%l in ('set _') do echo %%l
exit /b

_A=good
_D=6
_E=bad
_G=ugly

Beachten Sie, dass im obigen Beispiel die Variablen beim Drucken auf dem Bildschirm nativ alphabetisch sortiert sind.

Eine Variable als Array verwenden

Es ist möglich, eine Reihe von Variablen zu erstellen, die sich ähnlich wie ein Array verhalten können (obwohl sie kein tatsächliches Array-Objekt sind), indem Leerzeichen in der SET Anweisung verwendet werden:

@echo off
SET var=A "foo bar" 123
for %%a in (%var%) do (
    echo %%a
)
echo Get the variable directly: %var%

Ergebnis:

A
"foo bar"
123
Get the variable directly: A "foo bar" 123

Sie können Ihre Variable auch mithilfe von Indizes deklarieren, um bestimmte Informationen abzurufen. Dadurch werden mehrere Variablen mit der Illusion eines Arrays erstellt:

@echo off
setlocal enabledelayedexpansion
SET var[0]=A
SET var[1]=foo bar
SET var[2]=123
for %%a in (0,1,2) do (
    echo !var[%%a]!
)
echo Get one of the variables directly: %var[1]%

Ergebnis:

A
foo bar
123
Get one of the variables directly: foo bar

Beachten Sie, dass Sie im obigen Beispiel nicht auf var verweisen können, ohne den gewünschten Index anzugeben, da var nicht in einem eigenen Index vorhanden ist. In diesem Beispiel wird auch setlocal enabledelayedexpansion in Verbindung mit den Ausrufezeichen bei !var[%%a]! . Weitere Informationen hierzu finden Sie in der Dokumentation zum Variablensubstitutionsbereich .

Operationen mit Variablen

set var=10
set /a var=%var%+10
echo %var%

Der Endwert von var ist 20.

Die zweite Zeile funktioniert nicht innerhalb eines Befehlsblocks, der beispielsweise bei einer IF- Bedingung oder einer FOR- Schleife verwendet wird, da eine verzögerte Erweiterung anstelle der Erweiterung der Standardumgebungsvariablen erforderlich wäre.

Hier ist ein anderer, besserer Weg, auch in einem Befehlsblock zu arbeiten:

set var=10
set /A var+=10
echo %var%

Die Eingabeaufforderungsumgebung unterstützt mit 32-Bit-Ganzzahlwerten mit Vorzeichen:

  • Zusatz + und +=
  • Subtraktion - und -=
  • Multiplikation * und *=
  • Division / und /=
  • Modulteilung % und %=
  • bitweises AND &
  • bitweise ODER |
  • bitweise NICHT ~
  • bitweises XOR ^
  • bitweise Linksverschiebung <<
  • bitweise Verschiebung nach rechts >>
  • logisch NICHT !
  • unary minus -
  • Gruppieren mit ( und )

Der Windows-Befehlsinterpreter unterstützt keine 64-Bit-Integerwerte oder Gleitkommawerte in arithmetischen Ausdrücken.

Hinweis: Der Operator % muss als %% in eine Batchdatei %% , um als Operator interpretiert zu werden.

In einem Eingabeaufforderungsfenster die Befehlszeile Ausführen set /A Value=8 % 3 - 2 Value 2 set /A Value=8 % 3 weist den Wert 2 auf Umgebungsvariable Value und zusätzlich gibt 2 .

In eine Batch-Datei muss set /A Value=8 %% 3 , um der Umgebungsvariable Value den Wert 2 zuzuweisen, und es wird nichts ausgegeben bzw. geschrieben, um STDOUT (Standardausgabe) zu behandeln. Ein set /A Value=8 % 3 in einer Batchdatei würde zu einer Fehlermeldung führen, die beim Ausführen der Batchdatei den Operator fehlte .

Die Umgebung erfordert den Schalter /A für arithmetische Operationen, nicht für gewöhnliche Stringvariablen.

Jede Zeichenfolge im arithmetischen Ausdruck nach set /A , ob eine Zahl oder ein Operator automatisch als Name einer Umgebungsvariablen interpretiert wird.

Aus diesem Grund kann auf den Wert einer Variablen mit %variable% oder mit !variable! verwiesen !variable! ist nicht erforderlich, wenn der Variablenname nur aus Wortzeichen (0-9A-Za-z_) besteht, wobei das erste Zeichen keine Ziffer ist, was besonders hilfreich ist in einem Befehlsblock, der mit ( und mit einem Abgleich ) endet.

Die Zahlen werden mit der C / C ++ - Funktion strtol von String in Ganzzahl konvertiert, wobei base Null ist. Dies bedeutet eine automatische Basisbestimmung , die leicht zu unerwarteten Ergebnissen führen kann.

Beispiel:

set Divided=11
set Divisor=3

set /A Quotient=Divided / Divisor
set /A Remainder=Divided %% Divisor

echo %Divided% / %Divisor% = %Quotient%
echo %Divided% %% %Divisor% = %Remainder%

set HexValue1=0x14
set HexValue2=0x0A
set /A Result=(HexValue1 + HexValue2) * -3

echo (%HexValue1% + %HexValue2%) * -3 = (20 + 10) * -3 = %Result%

set /A Result%%=7
echo -90 %%= 7 = %Result%

set OctalValue=020
set DecimalValue=12
set /A Result=OctalValue - DecimalValue

echo %OctalValue% - %DecimalValue% = 16 - 12 = %Result%

Die Ausgabe dieses Beispiels lautet:

11 / 3 = 3
11 % 3 = 2
(0x14 + 0x0A) * -3 = (20 + 10) * -3 = -90
-90 %= 7 = -6
020 - 12 = 16 - 12 = 4

Variablen, die bei der Auswertung des arithmetischen Ausdrucks nicht definiert wurden, werden durch den Wert 0 ersetzt.

Variablen aus einer Eingabe setzen

Mit dem Schalter /p und dem SET Befehl können Sie Variablen aus einem Eingang definieren.

Diese Eingabe kann eine Benutzereingabe (Tastatur) sein:

echo Enter your name : 
set /p name=
echo Your name is %name%

Was kann so vereinfacht werden:

set /p name=Enter your name :
echo Your name is %name%

Oder Sie können die Eingabe aus einer Datei erhalten:

set /p name=< file.txt

In diesem Fall erhalten Sie den Wert der ersten Zeile aus file.txt

Den Wert verschiedener Zeilen in einer Datei abrufen:

(
   set /p line1=
   set /p line2=
   set /p line3=

) < file.txt


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow