Как да премахна cmd променлива?

Да кажем, че изпълнявам следното в CMD обвивката:

SET "FOO=bar"

Има ли начин да дефинирате тази променлива, освен рециклирането на обвивката на CMD?


person user288004    schedule 28.08.2011    source източник
comment
Дали наистина имате предвид MS-DOS (който е мъртъв от поне 10 години) - или казвате MS-DOS, но наистина имате предвид командния ред на Windows ( cmd.exe) ??   -  person marc_s    schedule 28.08.2011
comment
Вероятно, но няма особено значение за този въпрос...   -  person Madara's Ghost    schedule 28.08.2011
comment
Марк е прав. Това не е обвивката на MS-DOS. Хората никога не научават, че това е голяма разлика.   -  person Michael-O    schedule 28.08.2011
comment
@MadaraUchiha, наистина вашият set var= отговор работи под MS-DOS 6.22 command.com точно както под Windows cmd.exe. (Въпреки това, за разлика от Windows, поставянето на двойни кавички около var= не работи, вместо това създава променлива на средата, чието име започва с двойна кавичка.)   -  person Simon Kissane    schedule 13.07.2016


Отговори (5)


Да, можете да го деактивирате с

set FOO=

Или изрично използвайки:

set "FOO="

Уверете се, че след знака = не идват крайни странични (невидими) знаци. Това е:

  • set FOO= е различно от set FOO=      .
person Madara's Ghost    schedule 28.08.2011

Сигурен начин за премахване на настройката на променливата е да използвате и кавички, тогава няма проблеми със завършващите интервали.

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
person jeb    schedule 28.08.2011

друг метод

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Забележка: Това няма да работи на интерактивен команден ред. Но работи в пакетен скрипт.

person walid2mi    schedule 28.08.2011

Това работи за мен в моята обвивка на Windows 7 CMD:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
person Pekka    schedule 28.08.2011
comment
Интервалите са значими в командата set. Ако опитате set FOO = bar и след това опитате set FOO=, това няма да отмени 'FOO'. По някаква причина обаче те не са (толкова?) значими в % %. - person Ted Hopp; 28.08.2011
comment
Задното пространство също е важно. Съжалявам за редакцията, мислех, че вашият представител каза 270, а не 270k... опа. Често редактирам отговори, когато представител предполага, че потребителят няма да се върне. Очевидно случаят тук не е такъв. Моя грешка. - person chappjc; 10.02.2015
comment
@chappjs няма проблем, благодаря за редакцията! Не знам как съм пропуснал това. - person Pekka; 10.02.2015

Бих предложил следното само като коментар, но смятам, че е достатъчно важно, за да стои самостоятелно.

Много от предишните отговори споменаха, че трябва да се пазите от завършващи интервали; и със сигурност това е вярно. Въпреки това открих, че понякога завършващите интервали просто искат да влязат там, независимо какво - особено ако правите команден ред с един ред и се нуждаете от интервала като разделител на команди.

Това е решението на този проблем:

SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%

Чрез опаковането на декларацията в двойни кавички по този начин проблемът с интервалите може да бъде избегнат напълно. Това също може да бъде наистина полезно, когато променливите се създават чрез конкатенация, за да се премахнат интервалите между - например - пътеки, напр.

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
person dgo    schedule 01.12.2016