Mengatur atau memodifikasi variabel lingkungan (sistem lebar) di cmd.exe

13

Saya mencari cara mudah untuk menambah dan / atau memodifikasi dan / atau menghapus variabel lingkungan dari baris perintah. Khususnya, saya menemukan diri saya kadang-kadang dalam situasi ketika saya harus menambahkan beberapa variabel di cmd.exe.

Saya akan berterima kasih jika seseorang menunjukkan kepada saya cara non-GUI untuk memodifikasi (yaitu: menambahkan direktori baru ke) %PATH%variabel.

Perubahan harus permanen, tidak hanya selama durasi cmdsesi.

René Nyffenegger
sumber
1
Saya pikir satu masalah yang akan Anda temukan adalah bahwa sebagian besar perubahan pada variabel permanen , sistem-lebar lingkungan memerlukan logout / login (atau reboot) untuk sesi pengguna untuk menggunakan nilai-nilai yang dimodifikasi.
quack quixote

Jawaban:

8

Metode Old School secara langsung memanipulasi variabel registri dengan perintah reg adalah pada uang. Begini cara melakukannya:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Buang itu ke dalam skrip satu baris bernama apath.bat yang terlihat seperti ini:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Kemudian, yang perlu Anda berikan adalah jalur direktori baru yang Anda tambahkan saat memanggil skrip dan Anda dipanggil:

mis: apath.bat% addonpath%

Meskipun Hinch benar. Cara terbaik untuk melakukannya jika Anda menggunakan Vista atau di atas adalah dengan menggunakan perintah SETX yang dirancang untuk memungkinkan kita menyebarkan variabel lingkungan tanpa risiko memanipulasi registri secara langsung dengan dengan perintah reg yang dapat menyelamatkan mesin Anda jika Anda memanipulasi variabel ENV cukup untuk menggunakannya dengan cepat.

pengguna51259
sumber
Apakah perintah ini membutuhkan restart?
Juzer Ali
Tidak, tetapi Anda harus menggunakan proses baru (cmd).
Mike
1
Bagi saya, itu perlu restart? Mengapa? Saya menggunakan Windows XP, sp3.
Changwang Zhang
15

Anda bisa menggunakan setx.

Variabel pengguna:

SETX PATH "%PATH%;C:\MyDir"

Variabel sistem:

SETX PATH "%PATH%;C:\MyDir" /M
Taji
sumber
Saya percaya SETX tersedia sejak Vista, tetapi saya di XP.
René Nyffenegger
Anda mungkin bisa lolos dengan menyalin setx.exe dari mesin Vista. mungkin tidak akan berhasil, tetapi mungkin saja.
quack quixote
2
SETX adalah bagian dari Resource Tools untuk Windows Server 2003. Anda bisa menambahkannya ke direktori system32 Anda, atau yang lainnya ditambahkan ke jalur Anda (ayam-telur!).
paradroid
Saya membutuhkan bagian / M sehingga saya dapat memodifikasi variabel sistem, bukan yang pengguna. Terima kasih!
Andrei Sfat
Kedua perintah yang ditentukan salah. Mengapa? Windows sebenarnya mempertahankan dua nilai PATH: sistem-lebar dan per-pengguna. Saat Anda mengetik echo %PATH%, Anda melihatnya digabungkan bersama, seperti <system path>;<user path>. Dengan demikian, perintah pertama akan memaksa item saat ini dari jalur sistem muncul di jalur pengguna (yang tidak terlalu buruk), sedangkan perintah kedua akan menyebabkan item saat ini dari jalur pengguna muncul di jalur sistem (yang tidak dapat diterima).
Sasha
1

Anda bisa menggunakan HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunkunci registri untuk menunjuk pada file batch, untuk memungkinkan Anda membuat perubahan semi-permanen tanpa menggali dialog pengaturan misterius.

Phoshi
sumber
Sejauh yang saya tahu itu hanya akan mempengaruhi pemanggilan cmd.exe berikutnya (tanpa flag / d), tetapi tidak seluruh sistem atau proses (selanjutnya dipanggil) lainnya.
René Nyffenegger
Itu betul. Saya menemukan suatu keuntungan, berarti Anda dapat melakukan lebih banyak tanpa khawatir tentang proses yang berbeda tidak tahu harus berbuat apa. Ini AKAN, bagaimanapun, bekerja dalam prompt interaktif, yang selalu baik: P
Phoshi
1

Jika Anda tidak ingin menggunakan GUI (seperti pada Control Panel, System, Advanced, Environment Variables, PATH) Anda mungkin dapat menggunakan REGuntuk mengatur HKCU\Environment\PATH.

  • memperbarui %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

Itu /f kekuatan Timpa dari nilai yang ada sehingga Anda tidak perlu secara interaktif menjawab pertanyaan itu.

Edit: %PATH% perlu dikutip.

Sunting: Perlu dicatat juga bahwa ini mungkin membutuhkan reboot atau login ulang sebelum mulai berlaku. Sementara mengubahnya di GUI langsung berlaku (untuk cmd.exesesi baru ).

Referensi: http://support.microsoft.com/kb/104011

Seperti disebutkan dalam referensi, jika Anda ingin menulis beberapa kode, Anda dapat mengirim WM_SETTINGCHANGE dan itu harus menghindari persyaratan masuk / keluar.

opello
sumber
itu akan sangat berguna. Tapi, jika saya query pada variabel itu, itu tidak mengembalikan apa pun.
PA.
Hrm Pada XP Pro SP3 English saya mendapatkan PATH saya dengan: REG QUERY HKCU\Environment /v PATH.
opello
ini adalah jalur khusus pengguna, bukan jalur sistem-lebar. tidak yakin di mana dia tinggal. mereka dapat diatur untuk hal yang sama tetapi biasanya mengandung hal-hal yang terpisah (dan jalur kerja Anda adalah penggabungan keduanya).
quack quixote
Benar, ada di HKCU. Artikel Microsoft KB tertaut memiliki kedua lokasi registri.
opello
1
Ini hampir apa yang saya cari ... jika ada cara untuk juga mengirim WM_SETTINGCHANGE dari cmd.exe.
René Nyffenegger
0

Sangat mudah untuk mengubah jalur dalam proses cmd.exe saat ini:

PATH c:\MyNewDirectory;%PATH%

Anda selalu dapat melakukan BANTUAN PATH untuk bantuan pada perintah PATH.

jigital
sumber
1
Bukankah ini hanya baik untuk sesi ini?
JL.
ya, ini tidak bertahan di seluruh sesi.
John T
JL benar dan saya mencari solusi permanen. Saya telah mengedit pertanyaan saya sesuai dengan itu.
René Nyffenegger
0

Untuk perubahan permanen sistem yang benar-benar permanen, Anda benar-benar ingin menggunakan panel kontrol Sistem (alias My Computer -> Properties -> Advanced -> Variabel Lingkungan, untuk WinXP). Pengaturan di sana memengaruhi seluruh sistem Anda, termasuk program GUI di shell Explorer.

Jika Anda hanya perlu perubahan ini di cmd.exeshell, Anda bisa menjalankan batchfile yang mengaturnya setiap kali Anda memulai jendela cmd.exe. Jawaban Phoshi menyebutkan HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, yang sepertinya merupakan pilihan yang sangat baik - mudah untuk membuat perubahan kecil, dan jalankan kembali dari commandline jika Anda perlu. Tetapi ini tidak akan memengaruhi jendela GUI atau shell Explorer.

Saya sebenarnya terkejut bahwa Sysinternals tidak memiliki utilitas yang mampu melakukan ini. Mungkin PStools lain bisa melakukannya?

quack quixote
sumber
0

Banyak cara untuk melakukan ini. REG ADD adalah satu, atau REG IMPOR (menggunakan file .REG yang diekspor dari komputer lain). SETX / M adalah hal lain. Anda juga dapat mendorongnya menggunakan Preferensi Kebijakan Grup (cara termudah untuk menggunakan sejumlah besar komputer)

Skatterbrainz
sumber
0

Pikiran lain yang tidak disebutkan di sini, buat skrip autohotkey yang akan meluncurkan panel kontrol dan masukkan untuk Anda. Ini bekerja dengan baik jika Anda sudah menjadi pengguna AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

Juga bagaimana dengan mengedit hklm / system / currentcontrolset001 / control / session manager / environment: path key? Tetapi kunci yang sama berada di bawah hklm / system / currentcontrolset002 dan hklm / system / currentcontrolset. Tampaknya ini mungkin benar, per di sini: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Justin Goldberg
sumber