Ini sudah dibahas sedikit, tetapi ada informasi penting yang hilang. Semoga, saya bisa membantu menjernihkan cara kerjanya dan memberikan kelegaan bagi para pelancong yang lelah. :-)
Hapus Dari Proses Saat Ini
Jelas, semua orang tahu bahwa Anda hanya melakukan ini untuk menghapus variabel lingkungan dari proses Anda saat ini:
set FOO=
Hapus Persisten
Ada dua set variabel lingkungan, sistem-lebar dan pengguna.
Hapus Variabel Lingkungan Pengguna:
reg delete "HKCU\Environment" /v FOO /f
Hapus Variabel Lingkungan Luas Sistem:
REG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V FOO
Terapkan Nilai Tanpa Memulai Ulang
Inilah informasi ajaib yang hilang! Anda bertanya-tanya mengapa setelah Anda melakukan ini, ketika Anda meluncurkan jendela perintah baru, variabel lingkungan masih ada. Alasannya adalah karena explorer.exe belum memperbarui lingkungannya. Ketika satu proses meluncurkan yang lain, proses baru mewarisi lingkungan dari proses yang diluncurkan itu.
Ada dua cara untuk memperbaikinya tanpa me-reboot. Cara yang paling kasar adalah dengan mematikan proses explorer.exe Anda dan mulai lagi. Anda dapat melakukannya dari Task Manager . Saya tidak merekomendasikan metode ini.
Cara lain adalah dengan memberi tahu explorer.exe bahwa lingkungan telah berubah dan harus membacanya ulang. Ini dilakukan dengan menyiarkan pesan Windows (WM_SETTINGCHANGE). Ini dapat dilakukan dengan skrip PowerShell sederhana. Anda dapat dengan mudah menulis satu untuk melakukan ini, tetapi saya menemukan satu di Perbarui Pengaturan Jendela Setelah Perubahan Script :
if (-not ("win32.nativemethods" -as [type])) {
add-type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [intptr]0xffff;
$WM_SETTINGCHANGE = 0x1a;
$result = [uintptr]::zero
[win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[uintptr]::Zero, "Environment", 2, 5000, [ref]$result);
Ringkasan
Jadi untuk menghapus variabel lingkungan pengguna yang bernama "FOO" dan memiliki perubahan yang tercermin dalam proses yang Anda luncurkan setelahnya, lakukan hal berikut.
- Simpan skrip PowerShell ke file (kami akan menyebutnya updateenv.ps1).
- Lakukan ini dari baris perintah: reg hapus "HKCU \ Environment" / v FOO / f
- Jalankan updateenv.ps1.
- Tutup dan buka kembali prompt perintah Anda, dan Anda akan melihat bahwa variabel lingkungan tidak lagi ditentukan.
Catatan, Anda mungkin harus memperbarui pengaturan PowerShell Anda untuk memungkinkan Anda menjalankan skrip ini, tetapi saya akan membiarkannya sebagai latihan Google-fu untuk Anda.