Bagaimana cara menambahkan entri secara permanen ke variabel PATH sistem, melalui baris perintah?

13

Apa yang perlu saya lakukan:

  • Tambahkan folder ke %PATH%variabel lingkungan di tingkat SISTEM.
  • Jadikan perubahan itu permanen.

Bagaimana saya harus melakukannya:

  • Menggunakan prompt perintah, atau metode lain di mana semua perintah yang diperlukan dapat ditulis ke .BATfile.
  • Menggunakan hanya alat yang akan tersedia pada telanjang menginstal Windows XP SP3, tanpa konektivitas internet.
  • Saya lebih suka menjalankan skrip secara lokal, tetapi saya juga memiliki akses jarak jauh ke sistem target. Ingatlah, bahwa saya tidak dapat menganggap layanan non-standar (mis. Remote Registry) diaktifkan pada sistem.

Sistem yang perlu dikerjakan skrip:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

Saya cukup akrab dengan SETperintah, tetapi saya juga sadar bahwa itu umumnya akan menimpa variabel yang sudah ada alih-alih menambahkannya. Itu tidak bisa diterima. Apakah ada alat lain (atau opsi untuk SET, yang saya tidak sadari) yang akan ditambahkan ke variabel? Atau, apakah saya perlu melakukan perbaikan pada skrip yang mencakup menyalin sementara variabel yang ada ke variabel lain atau file teks?

Juga, pemahaman saya yang SETtidak akan mengubah variabel secara permanen . Saya telah melihat menyebutkan SETX, tetapi tampaknya tidak built-in untuk Windows XP SP3 (atau, setidaknya, tampaknya tidak tersedia pada sistem yang saya kerjakan). Apakah ada cara lain untuk membuat perubahan itu permanen, melalui pengeditan registri atau sesuatu?

Saya telah melakukan beberapa pencarian dan belajar sedikit dari sini tentang pengaturan variabel lingkungan di Windows. Namun, saya belum menemukan pertanyaan rangkap yang sesuai dengan kebutuhan saya. Jika ada, tolong beri tahu saya.

Iszi
sumber
Setx tidak datang dengan XP. Ada dalam satu atau lebih dari kit sumber daya, tapi saya lupa yang begitu saja. Untuk membuat perubahan variabel lingkungan permanen di baris perintah, itu jelas cara termudah. Anda dapat membuat perubahan dalam registri (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment) tetapi perubahan registri dari baris perintah juga tidak ada artinya. Jika saya jadi Anda, maka saya akan menulis VBScript untuk melakukan ini.
EBGreen
@EBGreen Saya agak terbiasa menggunakan REGuntuk melakukan perubahan registri. Jika Anda ingin memposting itu sebagai jawaban, dengan saran tentang cara mempertahankan jalur yang ada, setidaknya saya akan memberikan suara.
Iszi
1
Saya pikir, sesuai saran EBGreen, saya sudah tahu bagaimana saya harus melakukannya. Sekarang saya hanya berharap ada cara untuk memaksa pembaruan registri (dan mendorong ke variabel lingkungan) tanpa me-reboot atau memuat ulang Explorer?
Iszi
1
@EBGreen Ya, seperti itulah rupanya. Ngomong-ngomong, jika Anda punya waktu untuk mencari tahu sintaksnya, bisakah Anda memposting jawaban yang sebenarnya? Saya lebih suka ini tidak berubah menjadi pertanyaan yang dijawab sendiri.
Iszi
1
@ Lzi, Anda harus menjawab pertanyaan Anda sendiri. Jawaban yang baik untuk pertanyaan yang baik sama-sama berharga, bahkan ketika Anda menjawab sendiri.
Myrddin Emrys

Jawaban:

4

Yang berikut ini menambahkan 'C: \ bin' ke jalur Anda dan kemudian menyimpan jalur baru ke dalam Registri:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

Saya hanya menguji ini pada XP SP3, tetapi harus bekerja pada versi yang lebih baru.

Saya kira pengguna baru yang logon sebelum mesin reboot mungkin tidak mendapatkan jalur baru.

Harry benar dengan komentarnya tentang% SystemRoot%, jika Anda ingin menyimpannya, Anda harus menarik nilai lama untuk path dari registri terlebih dahulu:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)
Peter Hahndorf
sumber
2
Ketahuilah bahwa ini akan mengubah beberapa entri PATH yang ada dengan memperluas referensi variabel lingkungan. Sebagai contoh, entri standar% SystemRoot% \ system32 akan diganti dengan c: \ windows \ system32. Contoh khusus ini tidak masalah karena SystemRoot adalah konstanta, tetapi jika seseorang telah menetapkan PATH dengan referensi ke variabel lingkungan yang berubah Anda akan memecahnya. (Saya melakukan ini pada beberapa komputer saya untuk menunjuk ke direktori bin di Sun JDK saat ini.)
Harry Johnston
Script baru tidak berfungsi seperti yang ditulis jika path berisi tanda kurung, misalnya, referensi untuk File Program (x86).
Harry Johnston
-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f
segera
sumber
2
Meskipun perintah kosong dapat bermanfaat, kami berharap sedikit lebih banyak pekerjaan dalam pertanyaan / jawaban kami. Tolong jelaskan bagaimana ini menjawab pertanyaan OP.
Ƭᴇcʜιᴇ007