Definieren und Verwenden einer Variablen in einer Batchdatei

450

Ich versuche, eine Variable in einer Batch-Datei zu definieren und zu verwenden. Es sieht so aus, als ob es einfach sein sollte:

@echo off

set location = "bob"
echo We're working with "%location%"

Die Ausgabe, die ich bekomme, ist die folgende:

We're working with ""

Was ist denn hier los? Warum wird meine Variable nicht wiedergegeben?

Jamie Dixon
quelle

Antworten:

552

Das Leerzeichen vor dem =wird als Teil des Namens interpretiert, und das Leerzeichen danach (sowie die Anführungszeichen) werden als Teil des Werts interpretiert. Auf die von Ihnen erstellte Variable kann also verwiesen werden %location %. Wenn Sie dies nicht möchten, entfernen Sie die zusätzlichen Leerzeichen in der Definition.

Brian Nixon
quelle
7
Wenn das Leerzeichen zuvor =als Teil des Namens interpretiert wird, kann auf die Variable nicht verwiesen werden %location%, sondern auf %location %. Ist das ein Tippfehler?
Elende Variable
7
@Miserable Variable: Sie haben Recht; Es scheint, dass die ursprüngliche Antwort einer falschen Bearbeitung zum Opfer gefallen ist.
Brian Nixon
18
Das war es also,
womit
5
@Falaque Im Gegensatz zu alias x = yin * nix Land?
Basic
1
@Falaque also, was denkst du, wird Bash beim Laufen tun x = y?
Phuclv
263

Die Räume sind bedeutend. Sie haben eine Variable 'location ' mit dem Wert "erstellt"
' "bob"'. Hinweis - Es wurden einfache Anführungszeichen hinzugefügt, um die Position des Raums anzuzeigen.

Wenn Sie Anführungszeichen in Ihrem Wert wünschen, sollte Ihr Code so aussehen

set location="bob"

Wenn Sie keine Anführungszeichen möchten, sollte Ihr Code so aussehen

set location=bob

Oder noch besser

set "location=bob"

Die letzte Syntax verhindert, dass versehentlich nachgestellte Leerzeichen in den Wert gelangen, und schützt auch vor Sonderzeichen wie & |usw.

Dbenham
quelle
8
Gibt es Nachteile für die letzte Syntax?
Wolf
8
@ Wolf - Nein, es gibt keinen Nachteil. Es gibt jedoch eine Grenze, wann es am effektivsten ist. Solange der Wert keine Anführungszeichen enthält, können fast alle Zeichen im Wert erscheinen, ohne sich Gedanken über das Escapezeichen machen zu müssen. Die Ausnahmen sind %und möglicherweise, !wenn die verzögerte Erweiterung aktiviert ist. Aber wenn der Wert Anführungszeichen enthält, müssen Sie darum kümmern , wenn Gift Zeichen zu entkommen wie |, &etc.
dbenham
1
Dies scheint dasselbe zu sein wie das Festlegen der Umgebungsvariablen in Windows. Ist dies die einzige Möglichkeit, lokale Variablen in Batch-Skripten zu verwenden?
Parasrish
1
@ Wolf, Sie müssen nur sicherstellen, dass die Befehlserweiterungen aktiviert sind, aber dies ist trotzdem die Standardkonfiguration ...
aschipfl
7

Eingang location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

Ausgabe

We're working with bob

(Fehler, die du gemacht hast: spaceund " ")

Philip
quelle
4
set /pfordert den Benutzer auf und speichert die Antwort in der angegebenen Variablen. zBset /p name="What is your name? " & echo Hello, %name%.
Robert Mooney
6
-1, Die Syntax set /p "varname"="text"ist falsch, es wird eine Variable mit dem Namen location"(mit einem nachgestellten Anführungszeichen!) Erstellt. Es sollte sein set /p location="bob". Aber selbst dann passt es nicht mehr zur Frage
jeb