Windowsシェルセッションからすべての環境変数をクリアするにはどうすればよいですか?


12

新しいWindowsシェルセッションを開始し、次のように入力した場合:

env

多くの環境変数が設定されています。現在のシェルセッションからすべての環境変数を削除して、コマンドラインプログラムの実行をデバッグします。

私は次のアプローチで1つずつ行くことができました:

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

しかし、一度にすべてをクリアする簡単な方法はありますか?


1
なにenv?私はそのことを聞いたことがなく、ここでは機能しません。
パラドロイド

回答:


13

これをバッチファイルに書き込むことができます。

@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ファイルを実行できます。


これは素晴らしい。ありがとう!1つの小さなこと:backupenv.batファイルには、すべてのSET A = B行の末尾に2つの末尾スペースがあるようです。これは、復元時にいくつかの変数を台無しにするようです。
TiGz

%% a = %% bに続くスペースを削除しました。編集済みの回答を参照してください。今は大丈夫です。
ガフ

これにより、2つのスペースのいずれかが削除されました。各SET行の最後に1つのスペースが残ります。変です。
TiGz

おそらく、以前に(少し壊れた)スクリプトを実行したときからスペースが追加され、復元するためにバッチを実行したため、各変数にスペースが追加されましたか?それからあなたはそれを再び実行し、出力には2つのスペースがありますか?この場合、すべての変数の末尾にスペースを付けてしまって申し訳ありません。ただし、簡単にクリーンアップできるはずです。
ガフ

いや-私は毎回新しいシェルを開いていました。それを試してください...あなたは余分なスペースで終わるのですか?
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現在、投稿をフォーマットできません。申し訳ありません
アーロンロウ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.