Powiedzmy, że wykonuję następujące czynności w powłoce CMD:
set FOO=bar
Czy istnieje sposób na cofnięcie definicji tej zmiennej, inny niż recykling powłoki CMD?
Powiedzmy, że wykonuję następujące czynności w powłoce CMD:
set FOO=bar
Czy istnieje sposób na cofnięcie definicji tej zmiennej, inny niż recykling powłoki CMD?
set var=
odpowiedź działa pod MS-DOS 6.22 command.com tak samo, jak działa pod Windows cmd.exe. (Jednak, w przeciwieństwie do Windows, umieszczenie w cudzysłowie var = nie działa, zamiast tego tworzy zmienną środowiskową, którego nazwa zaczyna się podwójnym cudzysłowem.)
Odpowiedzi:
Tak, możesz to wyłączyć za pomocą
set FOO=
Lub jawnie używając:
set "FOO="
Upewnij się, że po =
znaku nie występują żadne dodatkowe (niewidoczne) znaki końcowe . To jest:
set FOO=
różni się od set FOO=
.To działa dla mnie w mojej powłoce CMD systemu Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
poleceniu znaczące są spacje . Jeśli spróbujesz, set FOO = bar
a następnie spróbujesz set FOO=
, nie spowoduje to usunięcia „FOO”. Jednak z jakiegoś powodu nie są (jak?) Znaczące w środku % %
.
Przedstawiłbym następujące uwagi tylko jako komentarz, ale myślę, że jest to wystarczająco ważne, aby stanąć samodzielnie.
Wiele z poprzednich odpowiedzi wspominało, że należy uważać na spacje końcowe; i na pewno to prawda. Jednak odkryłem, że czasami końcowe spacje chcą się tam dostać bez względu na wszystko - szczególnie jeśli robisz jednowierszowy wiersz poleceń i potrzebujesz spacji jako separatora poleceń.
Oto rozwiązanie tego problemu:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Dzięki zawijaniu deklaracji w podwójne cudzysłowy w ten sposób można całkowicie uniknąć problemu z odstępami. Może to być również bardzo przydatne, gdy zmienne są tworzone przez konkatenację w celu wyeliminowania spacji między - na przykład - ścieżkami, np .:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
)?