Bagaimana cara menghapus semua variabel lingkungan dari sesi shell Windows?

12

Jika saya memulai sesi shell Windows baru dan ketik:

env

Saya melihat banyak variabel lingkungan diatur. Saya ingin men-debug menjalankan program baris perintah dengan menghapus semua variabel lingkungan dari sesi shell saat ini.

Saya bisa melakukannya satu per satu dengan pendekatan berikut:

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

Namun, adakah cara sederhana untuk menghapus semuanya sekaligus?

TiGz
sumber
1
Apa env? Saya belum pernah mendengarnya sebelumnya, dan itu tidak berfungsi di sini.
paradroid

Jawaban:

13

Anda dapat menulis ini dalam file batch:

@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=
)

Ini pada dasarnya berjalan melalui masing-masing variabel lingkungan, mendukung mereka ke file batch ( backupenv.bat) dan kemudian menghapus setiap variabel. Untuk mengembalikannya, Anda dapat menjalankan backupenv.batfile.

Taji
sumber
Ini bagus. Terima kasih! Satu hal kecil: file backupenv.bat tampaknya memiliki 2 spasi tambahan di akhir setiap SET A = B baris. Ini tampaknya mengacaukan beberapa variabel pada pemulihan.
TiGz
Menghapus spasi setelah %% a = %% b, lihat jawaban yang diedit. Seharusnya sekarang baik-baik saja.
Gaff
Itu menghilangkan salah satu dari dua spasi ... satu ruang tersisa di akhir setiap baris SET. Aneh sekali.
TiGz
Mungkin spasi ditambahkan dari ketika Anda sebelumnya menjalankan skrip (sedikit rusak) saya, dan Anda menjalankan batch untuk memulihkan ... sehingga menambahkan ruang untuk setiap variabel? Lalu Anda menjalankannya lagi dan dalam output itu akan memiliki dua ruang? Jika ini masalahnya maka maaf karena sebelumnya telah berakhiran semua variabel Anda dengan spasi. Seharusnya mudah dibersihkan.
Gaff
Nah - Saya membuka shell baru setiap kali. Cobalah ... apakah Anda tidak mendapatkan ruang ekstra?
TiGz
6

Jika Anda hanya ingin menghapus semua variabel lingkungan untuk file batch, itu menjadi lebih mudah.

@echo off
Setlocal enabledelayedexpansion
Set >set

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

Baris terakhir menampilkan semua variabel lingkungan, yang seharusnya tidak ada, mengkonfirmasikan kode berfungsi.

Karena Setlocaldigunakan, semua perubahan lingkungan hilang setelah batch berakhir. Jadi, jika Anda mengetik Setsetelah batch, Anda akan melihat semua variabel lingkungan masih ada sehingga tidak perlu menyimpannya dalam file cadangan.

Aaron Lowe
sumber
Silakan berusaha menggunakan pemformatan kode. Itu membuat banyak hal lebih mudah dibaca.
boxspah
jawaban yang diterima lebih baik daripada ini karena jawaban lain memiliki cara untuk membuat cadangan yang ada
SeanClt
@SeanClt Anda perlu membaca komentar lengkap saya. Dikatakan bahwa cadangan tidak diperlukan dalam kasus ini.
Aaron Lowe
@scripthero Saat ini saya tidak dapat memformat pos, maaf
Aaron Lowe
Ya, Anda benar
SeanClt