Як очистити всі змінні середовища з сеансу оболонки Windows?


12

Якщо я запускаю новий сеанс оболонки Windows і введіть:

env

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

Я міг би ходити один за одним із таким підходом:

SET FOO=
SET BAR=
SET ... ... ...

Однак чи існує простий спосіб їх очистити за один раз?


1
Що таке env? Я ніколи раніше про це не чув, і це тут не працює.
парадороїд

Відповіді:


14

Ви можете написати це у пакетному файлі:

@echo off
if exist ".\backupenv.bat" del ".\backupenv.bat"
for /f "tokens=1* delims==" %%a in ('set') do (
echo set %%a=%%b>> .\backupenv.bat
set %%a=
)

В основному він працює через кожну змінну середовища, створює резервну копію до пакетного файлу ( backupenv.bat), а потім очищає кожну змінну. Щоб відновити їх, ви можете запустити backupenv.batфайл.


Це чудово. Спасибі! Одна невелика річ: схоже, що у файлу backupenv.bat є 2 пробіли в кінці кожного рядка SET A = B. Здається, це відновить деякі змінні при відновленні.
TiGz

Вилучено пробіл після %% a = %% b, див. Відредаговану відповідь. Зараз має бути добре.
Гафф

Це позбулося одного з двох пробілів ... один пробіл залишається в кінці кожного рядка SET. Що дивно.
TiGz

Можливо, пробіл було додано з того часу, коли ви раніше запускали мій (трохи зламаний) сценарій, і ви запускали пакет для відновлення ... таким чином додаючи пробіл до кожної змінної? Тоді ви знову запустили його, і у виході у нього було б два пробіли? Якщо це так, то вибачте за те, що раніше суфіксирували всі свої змінні пробілом. Потрібно легко прибирати.
Гафф

Ні, я щоразу відкривав нову оболонку. Спробуйте ... ви не закінчите зайвим місцем?
TiGz

6

Якщо ви хочете лише очистити всі змінні середовища для пакетного файлу, це стає ще простіше.

@echo off
Setlocal enabledelayedexpansion
Set >set

For /F "tokens=1* delims==" %%i in (set) do set %% %i=
Del set
Set

Заключний рядок виводить усі змінні середовища, яких не повинно бути жодних, що підтверджує працюючий код.

Оскільки Setlocalвикористовується, усі зміни середовища втрачаються після закінчення партії. Отже, якщо ви введете Setпісля пакету, ви побачите, що всі змінні середовища все ще існують, тому не потрібно зберігати їх у файлі резервної копії.


Будь ласка, докладіть певних зусиль для використання форматування коду. Це робить речі набагато зрозумілішими.
boxspah

прийнята відповідь краща за цю, оскільки в іншій відповіді є спосіб резервного копіювання існуючого
SeanClt

@SeanClt Вам потрібно прочитати мій повний коментар. Це говорить про те, що резервне копіювання в цьому випадку не потрібно.
Аарон Лоу

@scripthero Наразі я не можу форматувати повідомлення, вибачте
Аарон Лоу

Так, ви праві
SeanClt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.