Скажімо, я виконую наступне в оболонці CMD:
set FOO=bar
Чи є спосіб невизначити цю змінну, крім переробки оболонки CMD?
Скажімо, я виконую наступне в оболонці CMD:
set FOO=bar
Чи є спосіб невизначити цю змінну, крім переробки оболонки CMD?
set var=
відповідь працює під MS-DOS 6.22 command.com так само, як і під Windows cmd.exe. (Однак, на відміну від Windows, розміщення подвійних лапок навколо var = не працює, натомість створюється змінна середовища, ім'я якої починається з подвійних лапок.)
Відповіді:
Так, ви можете скасувати це за допомогою
set FOO=
Або явно використовуючи:
set "FOO="
Переконайтеся, що після =
знака не залишаються сторонні (невидимі) символи . Це є:
set FOO=
відрізняється від set FOO=
.Це працює для мене в моїй оболонці CMD для Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
команді. Якщо ви спробуєте, set FOO = bar
а потім спробуєте set FOO=
, це не скасує "FOO". Однак з якихось причин вони не є (як?) Значущими всередині % %
.
Я запропонував би наступне лише як коментар, але я вважаю, що це досить важливо, щоб стояти самостійно.
У багатьох попередніх відповідях згадувалося, що потрібно остерігатися пробілів; і точно це правда. Однак я виявив, що іноді кінцеві пробіли просто хочуть потрапити туди, незважаючи ні на що - особливо якщо ви робите командний рядок однорядковий і вам потрібен простір як роздільник команд.
Це рішення цієї проблеми:
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
) ??