613 Stimmen

Definieren und Verwenden einer Variablen in einer Batch-Datei

Ich versuche, eine Variable in einer Stapeldatei zu definieren und zu verwenden. Es sieht aus, als sollte es einfach sein:

@echo off

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

Die Ausgabe, die ich erhalte, ist die folgende:

We're working with ""

Was ist denn hier los? Warum wird meine Variable nicht mit einem Echo versehen?

731voto

Brian Nixon Punkte 8732

Der Raum vor dem = wird als Teil des Namens interpretiert, und das Leerzeichen danach (sowie die Anführungszeichen) werden als Teil des Wertes interpretiert. Die von Ihnen erstellte Variable kann also referenziert werden mit %location % . Wenn Sie das nicht wollen, entfernen Sie das/die zusätzliche(n) Leerzeichen in der Definition.

344voto

dbenham Punkte 122915

Die Räume sind bedeutend. Sie haben eine Variable mit dem Namen 'location ' mit einem Wert von
' "bob"' . Hinweis: Umschließende einfache Anführungszeichen wurden hinzugefügt, um die Position des Leerzeichens anzuzeigen.

Wenn Sie Ihren Wert in Anführungszeichen setzen wollen, sollte Ihr Code wie folgt aussehen

set location="bob"

Wenn Sie keine Anführungszeichen wünschen, sollte Ihr Code wie folgt aussehen

set location=bob

Oder noch besser

set "location=bob"

Die letzte Syntax verhindert, dass versehentlich Leerzeichen am Ende des Wertes stehen, und schützt auch vor Sonderzeichen wie & | usw.

12voto

Philip Punkte 331

Eingabe location.bat

@echo off
cls

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

Ausgabe

We're working with bob

(Fehler, die Sie gemacht haben: space y " " )

6voto

npocmaka Punkte 52753

Erwägen Sie auch die Verwendung von SETX - wird eine Variable auf Benutzer- oder Rechnerebene gesetzt (verfügbar für alle Benutzer), wobei die Variable beim nächsten Öffnen der cmd.exe verwendbar ist, so dass sie oft zusammen mit SET :

::setting variable for the current user
if not defined My_Var (
  set "My_Var=My_Value"
  setx My_Var My_Value
)

::setting machine defined variable
if not defined Global_Var (
  set "Global_Var=Global_Value"
  SetX Global_Var Global_Value /m
)

Sie können die Registrierungswerte auch direkt bearbeiten:

Benutzer-Variablen: HKEY_CURRENT_USER \Environment

System-Variablen: HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\Session Manager \Environment

Dadurch können einige Einschränkungen von SET und SETX vermieden werden, wie z.B. die Variablen, die = in ihren Namen.

3rd party edit

SETX.exe Umgebungsvariablen dauerhaft setzen,

SETX kann verwendet werden, um Umgebungsvariablen für den Rechner (HKLM) oder den aktuell angemeldeten Benutzer (HKCU) zu setzen:

Option /m

 /m
       Set the variable in the system environment HKLM.
       (The default is the local environment HKCU)

Ein weiteres Beispiel

::setting variable for the current user
if not defined JAVAJDK (
  set "JAVAJDK=C:\Program Files\Java\jdk-13\bin"
  setx JAVAJDK "C:\Program Files\Java\jdk-13\bin"
)

In einer command.exe können Sie die Variable wie folgt verwenden cd %JAVAJDK% .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X