Diciamo che eseguo quanto segue nella shell CMD:
SET "FOO=bar"
C'è un modo per indefinire questa variabile, oltre a riciclare la shell CMD?
Diciamo che eseguo quanto segue nella shell CMD:
SET "FOO=bar"
C'è un modo per indefinire questa variabile, oltre a riciclare la shell CMD?
set var=
risposta funziona con MS-DOS 6.22 command.com esattamente come con Windows cmd.exe. (Tuttavia, a differenza di Windows, inserire virgolette doppie attorno a var = non funziona, ma crea una variabile di ambiente il cui nome inizia con virgolette doppie.)
Risposte:
Sì, puoi disattivarlo con
set FOO=
O esplicitamente utilizzando:
set "FOO="
Assicurati che nessun carattere estraneo (invisibile) in coda venga dopo il =
segno. Questo è:
set FOO=
è diverso da set FOO=
.Questo funziona per me nella mia shell CMD di Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
comando. Se provi set FOO = bar
e poi provi set FOO=
, non verrà disattivato "FOO". Per qualche ragione, però, non sono (così?) Significativi all'interno % %
.
Vorrei offrire quanto segue solo come commento, ma penso che sia abbastanza importante da stare da solo.
Molte delle risposte precedenti menzionavano che bisogna stare attenti agli spazi finali; e di sicuro questo è vero. Tuttavia, ho scoperto che a volte gli spazi finali vogliono solo entrare lì, non importa cosa, in particolare se stai facendo una riga di comando e hai bisogno dello spazio come separatore di comandi.
Questa è la soluzione a quel problema:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Racchiudendo la dichiarazione tra virgolette in questo modo, il problema di spaziatura può essere completamente evitato. Questo può anche essere molto utile quando le variabili vengono create concatenando per eliminare gli spazi tra i percorsi, ad esempio, ad esempio:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
) ??