Скажімо, я виконую наступне в оболонці 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) ??