Да кажем, че изпълнявам следното в CMD обвивката:
SET "FOO=bar"
Има ли начин да дефинирате тази променлива, освен рециклирането на обвивката на CMD?
Да кажем, че изпълнявам следното в CMD обвивката:
SET "FOO=bar"
Има ли начин да дефинирате тази променлива, освен рециклирането на обвивката на CMD?
Да, можете да го деактивирате с
set FOO=
Или изрично използвайки:
set "FOO="
Уверете се, че след знака =
не идват крайни странични (невидими) знаци. Това е:
set FOO=
е различно от set FOO=
.Сигурен начин за премахване на настройката на променливата е да използвате и кавички, тогава няма проблеми със завършващите интервали.
set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
друг метод
@Echo oFF
setlocal
set FOO=bar
echo %FOO%
endlocal
echo %FOO%
pause
Забележка: Това няма да работи на интерактивен команден ред. Но работи в пакетен скрипт.
Това работи за мен в моята обвивка на Windows 7 CMD:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
. Ако опитате set FOO = bar
и след това опитате set FOO=
, това няма да отмени 'FOO'. По някаква причина обаче те не са (толкова?) значими в % %
.
- person Ted Hopp; 28.08.2011
Бих предложил следното само като коментар, но смятам, че е достатъчно важно, за да стои самостоятелно.
Много от предишните отговори споменаха, че трябва да се пазите от завършващи интервали; и със сигурност това е вярно. Въпреки това открих, че понякога завършващите интервали просто искат да влязат там, независимо какво - особено ако правите команден ред с един ред и се нуждаете от интервала като разделител на команди.
Това е решението на този проблем:
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
cmd.exe
) ?? - person marc_s   schedule 28.08.2011set var=
отговор работи под MS-DOS 6.22 command.com точно както под Windows cmd.exe. (Въпреки това, за разлика от Windows, поставянето на двойни кавички около var= не работи, вместо това създава променлива на средата, чието име започва с двойна кавичка.) - person Simon Kissane   schedule 13.07.2016