Come rimuovo una variabile cmd?


89

Diciamo che eseguo quanto segue nella shell CMD:

SET "FOO=bar"

C'è un modo per indefinire questa variabile, oltre a riciclare la shell CMD?


10
Avete davvero MS-DOS medi (che è morto da almeno 10 anni o giù di lì) - o ne dici di MS-DOS , ma sul serio la linea di comando di Windows ( cmd.exe) ??
marc_s

4
Probabilmente, ma non importa per quella domanda ...
Il fantasma di Madara

4
Marc ha ragione. Questa non è la shell di MS-DOS. Le persone non imparano mai che questa è una grande differenza.
Michael-O

@ MadaraUchiha, In effetti, la tua 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.)
Simon Kissane

Risposte:


137

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=      .

29

Un modo sicuro per annullare l'impostazione della variabile è usare anche le virgolette, quindi non ci sono problemi con gli spazi finali.

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%

11

un altro metodo

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Nota: questo non funzionerebbe su un prompt dei comandi interattivo. Ma funziona in batch script.


9

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

2
Gli spazi sono significativi nel setcomando. Se provi set FOO = bare poi provi set FOO=, non verrà disattivato "FOO". Per qualche ragione, però, non sono (così?) Significativi all'interno % %.
Ted Hopp

Anche lo spazio finale è importante. Ci scusiamo per la modifica, pensavo che il tuo rappresentante dicesse 270, non 270k ... oops. Spesso modifico le risposte quando il rappresentante suggerisce che l'utente non tornerà. Ovviamente non è il caso qui. Errore mio.
chappjc

@chappjs nessun problema, grazie per la modifica! Non sono sicuro di come mi sia perso.
Pekka

4

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
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.