如何从Windows Shell会话中清除所有环境变量?


12

如果我启动新的Windows Shell会话并键入:

env

我看到设置了许多环境变量。我想通过从当前Shell会话中删除所有环境变量来调试命令行程序的运行。

我可以采用以下方法一一讲解:

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

但是,有一种简单的方法可以一次性清除它们吗?


1
什么env啊 我以前从未听说过,在这里不起作用。
paradroid 2011年

Answers:


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文件似乎在每个SET A = B行的末尾都有2个尾随空格。这似乎搞砸了一些恢复变量。
TiGz 2011年

删除了%% a = %% b之后的空格,请参见编辑后的答案。现在应该可以了。
加夫

这样就消除了两个空格之一...在每个SET行的末尾保留一个空格。这很奇怪。
TiGz 2011年

也许是从以前运行我的脚本(略微损坏)开始添加了空间,然后又运行了要还原的批处理...从而为每个变量添加了空间?然后您再次运行它,并在输出中有两个空格?如果是这种情况,那么对于以前为您的所有变量加上空格后缀表示抱歉。虽然应该很容易清理。
加夫,

不,我每次都打开一个新的外壳。尝试一下...您是否最终没有多余的空间?
TiGz 2011年

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 2016年

@SeanClt您需要阅读我的完整评论。据说在这种情况下不需要备份。
亚伦·劳

@scripthero我目前无法格式化帖子,对不起
Aaron Lowe

是的,您说得对
SeanClt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.