I nomi delle variabili di ambiente definiti dall'utente di Windows possono contenere qualsiasi carattere tranne =
.Quale sintassi controllerà se un nome di variabile contenente spazi è definito?
È possibile includere caratteri speciali facendoli sfuggire. Un metodo più semplice consiste semplicemente nel racchiudere l'intera espressione SET tra virgolette. Ad esempio:
set "A weird & "complex" variable=My value"
set A weird ^& "complex" variable=My value
Entrambe le espressioni precedenti danno lo stesso risultato. Il nome della variabile è A weird & "complex" variable
e il valore è My value
l'IF costrutto definita viene utilizzata per verificare se è definita una variabile. Le virgolette non funzionano per questo test, i caratteri speciali nel nome (comprese le virgolette) devono essere sfuggiti.
set "A&B=value"
if defined A^&B echo This works
if defined "A&B" echo This does not work
Il test di escape sopra funziona perfettamente. Il test quotato non funziona
Ma come posso verificare se esiste una variabile contenente spazi?
set "A B=value"
if defined A^ B echo this does not work!
Sembra che quanto sopra dovrebbe funzionare, ma non funziona!
Sto cercando una risposta che NON implichi l'espansione della variabile utilizzando% A B% o! A B!
Il FOR /! Ritardare! la soluzione non era ovvia quando avevo bisogno di dormire. Ci ho pensato quando mi sono svegliato, ma hai già ricevuto una risposta eccellente! :) – dbenham
L'analisi * escape2 * è molto interessante. Ancora un'altra opportunità di inserire un commento in una dichiarazione – dbenham