如何清除 Windows shell 会话中的所有环境变量?

TiG*_*iGz 15 windows shell

如果我启动一个新的 Windows shell 会话并键入:

env
Run Code Online (Sandbox Code Playgroud)

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

我可以使用以下方法一一进行:

SET FOO=
SET BAR=
SET ... ... ...
Run Code Online (Sandbox Code Playgroud)

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

Gaf*_*aff 15

您可以将其写入批处理文件中:

@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=
)
Run Code Online (Sandbox Code Playgroud)

它基本上遍历每个环境变量,将它们备份到批处理文件 ( backupenv.bat),然后清除每个变量。要恢复它们,您可以运行该backupenv.bat文件。


小智 6

如果您只想清除批处理文件的所有环境变量,那就更容易了。

@echo off
Setlocal enabledelayedexpansion
Set >set

For /F "tokens=1* delims==" %%i in (set) do set %% %i=
Del set
Set
Run Code Online (Sandbox Code Playgroud)

最后一行输出所有环境变量,应该没有,确认代码有效。

因为Setlocal使用了,批处理结束后所有的环境变化都会丢失。因此,如果您Set在批处理之后键入,您将看到所有环境变量仍然存在,因此无需将其存储在备份文件中。