Windows memiliki setx
perintah:
Description:
Creates or modifies environment variables in the user or system
environment.
Jadi, Anda dapat mengatur variabel seperti ini:
setx FOOBAR 1
Dan Anda dapat menghapus nilai seperti ini:
setx FOOBAR ""
Namun, variabel tidak dihapus. Itu tetap dalam registri:
Jadi bagaimana Anda benar-benar menghapus variabel?
windows
registry
environment-variables
Peter Mortensen
sumber
sumber
Jawaban:
Untuk menghapus variabel dari lingkungan saat ini ( tidak secara permanen):
Untuk secara permanen menghapus variabel dari lingkungan pengguna (yang merupakan tempat default
setx
meletakkannya):Jika variabel diatur dalam lingkungan sistem (mis. Jika Anda awalnya mengaturnya dengan
setx /M
), sebagai administrator jalankan:Catatan:
REG
Perintah di atas tidak akan memengaruhi proses yang ada (dan beberapa proses baru yang bercabang dari proses yang ada), jadi jika penting agar perubahan segera berlaku, hal termudah dan paling pasti untuk dilakukan adalah keluar dan kembali atau reboot. Jika ini bukan pilihan atau Anda ingin menggali lebih dalam, beberapa jawaban lain di sini memiliki beberapa saran bagus yang mungkin sesuai dengan kasus penggunaan Anda.sumber
setx JUNK Hello
. Buka cmd baru. Ketikecho %JUNK%
dan dapatkanHello
. Lalu saya lakukanREG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V JUNK
, dan konfirmasikan bahwa nilai hilang dari registri. Saya membuka cmd dan ketik baruecho %JUNK%
dan masih mendapatkanHello
. Pencarian registri tidak menunjukkan kehadiran 'JUNK'. Tolong jangan bilang Anda perlu reboot!user
perintah lingkungan, berhasil. Kemudian, ketika saya mengetik ulang perintah yang saya dapatkanThe system was unable to find the specified registry or key value
. Juga, pencarian globalJUNK
dalam registri denganregedit
tidak menemukan apa pun. Namun, ketika saya membuka jendela Command baru (melalui Start / accessories, atau cmd.exe di Run) dan ketikecho %JUNK%
, nilainya masih ada di sana!SET
daftar untuk shell cmd berikutnya) dan kemudian menghapusnya dari registri, misalnya:SETX FOOBAR "" & REG delete HKCU\Environment /F /V FOOBAR
Untuk menghapus variabel dari sesi perintah saat ini tanpa menghapusnya secara permanen, gunakan perintah built-in reguler
set
- cukup masukkan apa pun setelah tanda sama dengan:set FOOBAR=
Untuk mengonfirmasi, jalankan
set
tanpa argumen dan periksa lingkungan saat ini. Variabel harus hilang dari daftar sepenuhnya.sumber
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:
Hapus Persisten
Ada dua set variabel lingkungan, sistem-lebar dan pengguna.
Hapus Variabel Lingkungan Pengguna:
Hapus Variabel Lingkungan Luas Sistem:
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 :
Ringkasan
Jadi untuk menghapus variabel lingkungan pengguna yang bernama "FOO" dan memiliki perubahan yang tercermin dalam proses yang Anda luncurkan setelahnya, lakukan hal berikut.
Catatan, Anda mungkin harus memperbarui pengaturan PowerShell Anda untuk memungkinkan Anda menjalankan skrip ini, tetapi saya akan membiarkannya sebagai latihan Google-fu untuk Anda.
sumber
source .bashrc
(atau sepupunya) di Windows. Ini menuju ke bagian atas baris "rujuk ke ini" untuk saya.Dari PowerShell Anda dapat menggunakan
[System.Environment]::SetEnvironmentVariable()
metode .NET :Untuk menghapus variabel lingkungan pengguna bernama
FOO
:Catatan yang
$null
digunakan untuk memberi sinyal lebih baik niat untuk menghapus variabel, meskipun secara teknis itu sama dengan melewati''
dalam kasus ini.Untuk menghapus variabel lingkungan sistem (level mesin) bernama
FOO
- memerlukan elevasi (harus dijalankan sebagai administrator):Selain dari eksekusi yang lebih cepat, keuntungan dari
reg.exe
metode berbasis adalah bahwa aplikasi lain diberitahu tentang perubahan , melaluiWM_SETTINGCHANGE
pesan (meskipun tidak semua aplikasi mendengarkan pesan itu).sumber
Saya setuju dengan CupawnTae .
SET
tidak berguna untuk perubahan pada lingkungan master.FYI: Variabel sistem berada dalam
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
(jauh lebih lama daripada vars pengguna).Perintah penuh untuk sistem var bernama FOOBAR karena itu adalah:
(Perhatikan kutipan yang diperlukan untuk menangani spasi.)
Sayang sekali
setx
perintahnya tidak mendukung sintaks hapus. :(PS: Gunakan dengan bertanggung jawab - Jika Anda membunuh variabel jalur Anda, jangan salahkan saya!
sumber
Perintah dalam jawaban DougWare tidak berfungsi, tetapi ini berhasil:
Pintasan
HKLM
dapat digunakan untukHKEY_LOCAL_MACHINE
.sumber
Hapus Tanpa Memulai Ulang
Pertanyaan OP memang telah dijawab secara luas, termasuk bagaimana menghindari reboot melalui PowerShell, VBScript, atau apa saja.
Namun, jika Anda harus tetap berpegang pada perintah cmd saja dan tidak memiliki kemewahan untuk dapat memanggil powershell atau vbscript, Anda bisa menggunakan pendekatan berikut:
Jadi keajaiban di sini adalah bahwa dengan menggunakan "setx" untuk menetapkan sesuatu ke variabel yang tidak Anda butuhkan (dalam contoh saya DUMMY), Anda memaksa Explorer.exe untuk membaca ulang variabel dari registri, tanpa memerlukan PowerShell. Anda kemudian membersihkan boneka itu, dan meskipun itu akan tetap berada di lingkungan Explorer sebentar, mungkin tidak akan membahayakan siapa pun.
Atau jika setelah menghapus variabel Anda perlu mengatur yang baru, maka Anda bahkan tidak perlu dummy. Hanya dengan menggunakan SETX untuk mengatur variabel baru akan secara otomatis menghapus variabel yang baru saja Anda hapus dari tugas cmd baru yang mungkin memulai.
Informasi latar belakang: Saya baru saja menggunakan pendekatan ini berhasil menggantikan satu set variabel pengguna dengan variabel sistem dengan nama yang sama di semua komputer di pekerjaan saya, dengan memodifikasi skrip cmd yang ada. Ada terlalu banyak komputer untuk melakukannya secara manual, juga tidak praktis untuk menyalin skrip powershell atau vbs tambahan ke semuanya. Alasan saya sangat diperlukan untuk mengganti pengguna dengan variabel sistem adalah bahwa variabel pengguna disinkronkan dalam profil roaming (tidak berpikir tentang itu), sehingga beberapa mesin menggunakan login windows yang sama tetapi membutuhkan nilai yang berbeda, digabungkan.
sumber
hanya menyebabkan nilai FOOBAR menjadi string nol. (Meskipun, itu terlihat dengan
set
perintah dengan "" jadi mungkin tanda kutip ganda adalah string.)Saya menggunakan:
dan kemudian FOOBAR tidak lagi terdaftar dalam perintah yang ditetapkan. (Log-off tidak diperlukan.)
Windows 7 32 bit, menggunakan command prompt, non-administrator adalah apa yang saya gunakan. (Tidak cmd atau Windows+R , yang mungkin berbeda.)
BTW, saya tidak melihat variabel yang saya buat di mana saja di registri setelah saya membuatnya. saya menggunakan RegEdit bukan sebagai administrator.
sumber
Anda juga dapat membuat skrip VBScript kecil :
Kemudian menyebutnya seperti
%windir%\System32\cscript.exe //Nologo "script_name.vbs" FOOBAR
.Kerugiannya adalah Anda memerlukan skrip tambahan, tetapi tidak memerlukan reboot.
sumber