2014-10-15 4 views

Antwort

3

Sie müssen näher aus dem gleichen Symbol, Text bringen:

set var=text 
echo %var% 
text 
+0

Ok, es funktioniert, aber warum? Könnten Sie auch 'set/p' damit verwenden? – Logern

+1

@Logern Wenn Sie 'var = text' setzen, erzeugen Sie eine Variable mit dem Namen' var' (beachten Sie das Leerzeichen nach dem r). – aphoria

13

Wert/string zu einer Umgebungsvariablen zuweisen

Mit Befehlserweiterungen aktiviert standardmäßig wie am besten mit:

set "var=text" 

Der Befehl lautet gesetzt und der Parameter ist "variable=value".

Die Parameterzeichenfolge kann wie alle Befehle in doppelte Anführungszeichen gesetzt werden, sofern die Befehlserweiterungen standardmäßig aktiviert sind.

Wenn die doppelten Anführungszeichen nicht herum variable=value verwendet, Befehl gesetzt alles interpretiert die Linie nach dem ersten Gleichheitszeichen nicht sichtbar einschließlich Leerzeichen und horizontale Laschen am Ende der Zeile als String-Wert bis zum Ende zu den Variablen zuzuordnen.

Der Name der Variablen beginnt mit dem ersten Nicht-Leerzeichen (nach dem doppelten Anführungszeichen, falls verwendet) und endet mit dem ersten Gleichheitszeichen. Der der Variablen zugewiesene Wert beginnt rechts vom ersten Gleichheitszeichen und endet am Zeilenende oder letzten doppelten Anführungszeichen.

set VAR = TEXT 

schafft eine Umgebungsvariable mit dem Namen VARRaum und ordnet die Zeichenfolge RaumTEXT auf diese Variable.

Auch

set var="text" 

mit oft nicht richtig, da dies zu enthalten variable var dem Text mit den Anführungszeichen zugeordnet werden und alle Leerzeichen und Tabulatoren. Der Verweis auf var auf eine andere Codezeile mit umgebenden Anführungszeichen führt oft zu einer Fehlermeldung, da die Variable den Text bereits in Anführungszeichen hält. Weitere Details finden Sie Antwort auf How to set environment variables with spaces?

Beispiel:

@echo off 
setlocal 
set "var=text" 
set "var = text" 
set "var1=and more text" 
set var2="and more text" 
set var3="text with 1 trailing space" 
set var 
echo var3=%var3%^<- Do you see the trailing space? 
echo/ 
set UnwantedSpaceVar=Hello 
echo %UnwantedSpaceVar%! ^<- Where does the space come from? 
echo/ 
echo There is a trailing space after Hello in this code snippet. 
echo/ 
set "TrailingSpacesIgnored=Hi" 
echo %TrailingSpacesIgnored%! ^<- The 3 trailing spaces above are ignored. 
echo/ 
endlocal 
pause 

in der Ausgabe dieses kleine Batch-Code Ergebnisse Lauf:

var=text 
var = text 
var1=and more text 
var2="and more text" 
var3="text with 1 trailing space" 
var3="text with 1 trailing space" <- Do you see the trailing space? 

Hello ! <- Where does the space come from? 

There is a trailing space after Hello in this code snippet. 

Hi! <- The 3 trailing spaces above are ignored. 

variable=value in Anführungszeichen gesetzt kann auch erfolgen, wenn der Text selbst enthält 1 oder mehr Anführungszeichen

set "Quote="" 

Diese Linie definiert die Variable Quote mit dem Wert ". Befehl gesetzt interpretiert alles nach dem ersten Gleichheitszeichen links nach dem letzten doppelten Anführungszeichen als Wert, der der Variablen mit dem Namen zwischen dem ersten Anführungszeichen und dem ersten Gleichheitszeichen zugewiesen wird.

Variablenzuweisung mit behinderten Befehlserweiterungen

Die Befehlssyntax set "variable=value" nicht, wenn die Befehlserweiterungen mit setlocal DisableExtensions in der Batch-Datei (oder in Windows-Registry, die von mir sehr selten und nie auf jedem Windows gesehen ist deaktiviert verwendet werden kann, Computer). Ein Syntaxfehler wäre das Ergebnis bei der Ausführung der Batch-Datei.

Es ist nur möglich, set variable=value mit deaktivierten Befehlserweiterungen zu verwenden, wobei der Wert auch doppelte Anführungszeichen enthalten kann und auf nachfolgende Leerzeichen/Tabs geachtet werden muss, da sie auch der Umgebungsvariablen zugewiesen sind.

In einem Eingabeaufforderungsfenster ausführen cmd /? und setlocal /? für weitere Informationen über Befehlserweiterungen und welche Befehle von Befehlserweiterungen betroffen sind. Anmerkung: Die Ausgabeliste der betroffenen Befehle vermißt exit wie in Antworten beschrieben auf Where does GOTO :EOF return to?

Variablenzuweisung via arithmetischem Ausdruck

Befehl Mit gesetzt mit Option /A Änderungen vollständig das Parsing des zweiten Arguments, also die Saite nach set /A. Mit der Option /A als erstes Argument wird die zweite Zeichenfolge als arithmetischer Ausdruck interpretiert und daher vollständig anders verarbeitet als bei der Zuweisung eines Zeichenfolgenwerts zu einer Umgebungsvariablen. Umgebungsvariablen haben immer den Typ string und niemals den Typ integer.

Die Verwendung der Option /A erfordert aktivierte Befehlserweiterungen, da andernfalls der Befehl ignoriert den Rest der Zeile vollständig ohne Fehlermeldung ignoriert.

Es wird in den meisten Fällen nicht empfohlen, einer Umgebungsvariablen nur eine Zahl zuzuweisen, die einen arithmetischen Ausdruck verwendet, d. H. set /A var=1. set "var=1" oder nur set var=1 (und keine nachfolgenden Leerzeichen) sind ein wenig schneller, weil Umgebungsvariablen immer vom Typ string sind.

In einem arithmetischen Ausdruck werden Leerzeichen als Trennzeichen für Variablennamen, Zahlen und Operatoren interpretiert. Aus diesem Grunde ist die Befehlszeile set /A var = 1nicht definiert eine Variable mit Namen VARRaum mit der Zeichenfolge Raum als set var = 1 tut. set /A var = 1 definiert eine Variable mit dem Namen VAR mit Stringwert nach 1 aus string (Batch-Datei enthält, die mit Hexadezimalcode Wert 31 1 als Zeichen) Umwandlung mit dem Wert 1 Ganzzahl- und mit den beiden Werten 0x31 in einen String zurück und 0x00 (Zeichenfolge, die null beendet).

Variablenzuweisung über einen prompten

Auch Verwendung Befehlssatz mit Option /P das Parsen des nach dem String-Variable ändern Namen und Gleichheitszeichen. Die Zeichenfolge nach dem Variablennamen und dem Gleichheitszeichen wird als Ausgabetext interpretiert und nicht als Zeichenfolge, die der Umgebungsvariablen zugewiesen werden soll.

Die Umgebungsvariablen, die (aus einer Datei oder Befehl/Anwendung oder umgeleitet), um für Benutzer eingegebene Zeichenkette zugewiesen werden, oder im Fall eines Benutzers eingeben nichts vor RETURN oder ENTER, hält seinen aktuellen Wert bzw. ist noch undefiniert, wenn nicht vor der Abfrage definiert.

Die Verwendung der Option /P erfordert aktivierte Befehlserweiterungen, da ansonsten der Befehl ignoriert den Rest der Zeile vollständig ohne Fehlermeldung ignoriert.

Meist verwendete Syntax für einen Benutzer für eine Zeichenfolge aufgefordert ist:

set /P var="Please enter something: " 

Der Befehl gesetzt in diesem Fall entfernt automatisch die doppelten Anführungszeichen um den Aufforderungstext vor dem Drucken STDOUT (Konsolenfenster zu handhaben wenn nicht umgeleitet).

aber die Arbeit ist auch:

set /P "var=Please enter something: " 

Bitte lesen Sie this answer, um weitere Informationen über die schnelle Textanalyse und wie ein Aufforderungstext zur Ausgabe mit doppelten Anführungszeichen umgeben.

+0

1. Für die Syntax 'set 'VAR = Text" 'sollte erwähnt werden, dass dies nur funktioniert, wenn die Befehlserweiterungen aktiviert sind (siehe auch' cmd /? 'Und' setlocal /? '). 2. Für 'set/P' ist die beste Syntax tatsächlich' set/P VAR = "Bitte geben Sie etwas ein:" ', da, falls der Eingabetext mit eigenen Anführungszeichen beginnt, die Syntax' set/P "VAR = "ist verboten:" 'kann zu unerwarteten Ergebnissen führen, während' set/P VAR = "" verboten ist: "' nicht. – aschipfl