Definizione e utilizzo di una variabile nel file batch


450

Sto cercando di definire e utilizzare una variabile in un file batch. Sembra che dovrebbe essere semplice:

@echo off

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

L'output che ottengo è il seguente:

We're working with ""

Cosa sta succedendo qui? Perché la mia variabile non viene ripetuta?

Risposte:


552

Lo spazio prima di =è interpretato come parte del nome e lo spazio che lo segue (così come le virgolette) sono interpretati come parte del valore. Quindi è possibile fare riferimento alla variabile che hai creato %location %. Se non è quello che desideri, rimuovi gli spazi extra nella definizione.


7
Se lo spazio prima =viene interpretato come parte del nome la variabile non può essere indicata come %location%, deve essere fatto riferimento come %location %. È un errore di battitura?
Miserabile variabile

7
@Miserable Variable: hai ragione; sembra che la risposta originale sia stata vittima di una modifica errata.
Brian Nixon,

18
Questo è ciò che ha fatto la SM
Falaque, l'

5
@Falaque Al contrario di alias x = y* nix land?
Base

1
@Falaque quindi cosa pensi che bash farà quando corre x = y?
phuclv,

263

Gli spazi sono significativi. Hai creato una variabile denominata 'location ' con un valore di
' "bob"'. Nota: sono state aggiunte virgolette singole per mostrare la posizione dello spazio.

Se vuoi virgolette nel tuo valore, allora il tuo codice dovrebbe apparire come

set location="bob"

Se non vuoi virgolette, il tuo codice dovrebbe apparire come

set location=bob

O meglio ancora

set "location=bob"

L'ultima sintassi impedisce agli spazi finali involontari di entrare nel valore e protegge anche da caratteri speciali come & |ecc.


8
Ci sono degli svantaggi per l'ultima sintassi?
Lupo,

8
@ Lupo - No, non c'è un aspetto negativo. Tuttavia, esiste un limite a quando è più efficace. Finché il valore non contiene virgolette, quasi tutti i caratteri possono apparire nel valore senza preoccuparsi di scappare. Le eccezioni sono %, e possibilmente !se è abilitata l'espansione ritardata. Ma se il valore contiene citazioni, allora si deve preoccupare quando per sfuggire caratteri veleno come |, &e così via
dbenham

1
questo sembra essere lo stesso dell'impostazione della variabile d'ambiente in Windows. È l'unico modo per utilizzare le variabili locali negli script batch?
Parassita il

1
@Wolf, devi solo assicurarti che le estensioni dei comandi siano abilitate, ma questa è comunque la configurazione predefinita ...
aschipfl

7

ingresso location.bat

@echo off
cls

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

produzione

We're working with bob

(errori che hai fatto: spacee " ")


4
set /prichiede all'utente e memorizza la risposta nella variabile specificata. ad esempio,set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

6
-1, la sintassi set /p "varname"="text"è errata, crea una variabile denominata location"(con una virgola finale!). Dovrebbe essere set /p location="bob". Ma anche allora, non corrisponde più alla domanda
jeb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.