Menambahkan direktori ke Variabel Lingkungan PATH di Windows


526

Saya mencoba untuk menambah variabel lingkungan C:\xampp\phpsistem saya PATHdi Windows.

Saya sudah menambahkannya menggunakan kotak dialog Environment Variables.

Tetapi ketika saya mengetik di konsol saya:

C:\>path

itu tidak menunjukkan C:\xampp\phpdirektori baru :

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

Saya punya dua pertanyaan:

  1. Kenapa ini terjadi? Apakah ada sesuatu yang saya lakukan salah?
  2. Juga, bagaimana cara menambahkan direktori ke PATHvariabel saya menggunakan konsol (dan secara terprogram, dengan file batch)?

43
Ini pada topik karena ini adalah pertanyaan tentang 'alat yang biasa digunakan programmer'. Jika Anda mengembangkan di Windows dan Anda tidak pernah perlu memodifikasi PATH, saya terkejut. Untuk memuaskan keinginan terkait dengan pemrograman, saya telah menyoroti apa yang ditunjukkan oleh jawaban tertinggi: Anda dapat melakukan ini secara terprogram melalui konsol (atau melalui file batch).
George Stocker

1
terima kasih atas ulasannya @ GeorgeStocker ya saya melakukannya secara terprogram dan tapi saya hanya belum punya ide bahwa saya perlu login kembali setelah menerapkan perubahan pada sesi konsol. (dan saya pikir ini satu-satunya dalam kasus saya) tetapi jawaban dengan suara terbanyak umumnya menjawab pertanyaan
Netorica

1
@ George - setuju, tetapi sebagaimana adanya, pertanyaan ini ditulis untuk Pengguna Super, dan bukan Stack Overflow. Pengguna Super akan memberikan bantuan dengan konfigurasi server web untuk penggunaan pribadi. Stack Overflow untuk pertanyaan pemrograman.
jww

1
Keluar dan buka konsol baru ... Jika Anda menggunakan bash, itu mungkin memerlukan reboot sistem sebelum perubahan tetap ada, tergantung pada bagaimana / apa yang Anda gunakan ,.
Pelacak1

Jawaban:


148

Ini hanya mengubah registri. Proses yang ada tidak akan menggunakan nilai-nilai ini. Proses baru akan melakukannya jika dimulai setelah perubahan ini dan tidak mewarisi lingkungan lama dari induknya.

Anda tidak menentukan bagaimana Anda memulai sesi konsol. Cara terbaik untuk memastikan ini adalah keluar dari shell perintah dan jalankan lagi. Maka harus mewarisi PATH yang diperbarui.


9
Hmm, tidak, itu benar-benar hanya memodifikasi registri. Seharusnya agak jelas dari melakukan ini dalam dialog Panel Kontrol, bukan, katakanlah, prompt perintah dengan perintah PATH. Anda dapat mengamati apa yang dilakukannya dengan mudah dengan Proses Monitor SysInternals, jika Anda peduli. Menggunakan PATH tidak sama, setiap perubahan yang Anda buat akan hilang ketika konsol ditutup. SETX adalah cara untuk membuat perubahan terus-menerus, seperti dialog.
Hans Passant

3
Ini benar. Anda selalu harus memulai kembali sesi konsol Anda sebelum mengambil variabel lingkungan baru.
BrainSlugs83

1
Apakah sesi konsol memperbarui variabel jika WM_SETTINGCHANGEpesan dikirim dari aplikasi? stackoverflow.com/a/8358361
John_West

Secara teori dimungkinkan, tidak ada implementasi CRT praktis yang saya tahu benar-benar melakukan ini. Explorer tidak.
Hans Passant

1
Informasi latar belakang menguatkan ini: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli

961

Pilihan 1

Setelah Anda berubah PATHdengan GUI, tutup dan buka kembali jendela konsol.

Ini berfungsi karena hanya program yang dimulai setelah perubahan yang akan melihat yang baru PATH.

pilihan 2

Jalankan perintah ini di jendela perintah yang telah Anda buka:

set PATH=%PATH%;C:\your\path\here\

Perintah ini ditambahkan C:\your\path\here\ke arus PATH.

Hancurkan:

  • set- Perintah yang mengubah variabel lingkungan cmd hanya untuk sesi cmd saat ini ; program lain dan sistem tidak terpengaruh.
  • PATH=- Menandakan bahwa itu PATHadalah variabel lingkungan untuk sementara diubah.
  • %PATH%;C:\your\path\here\- Bagian %PATH%mengembang ke nilai saat ini PATH, dan ;C:\your\path\here\kemudian digabungkan untuk itu. Ini menjadi yang baru PATH.

16
@Ilya: Saya bermaksud agar Anda membuka jendela konsol setelah path diubah di MyComputer-> Properties-> Advanced-> Env Variables-> Path. Beberapa aplikasi windows akan menyebarkan perubahan variabel lingkungan setelah dijalankan dan beberapa tidak. WinXP cmd.exe tidak.
JimR

7
jika saya keluar dari konsol dan saya jalankan kembali saya harus mengatur ulang jalan. Adakah cara untuk membuat perubahan ini permanen?
David 天宇 Wong

2
@ David 天宇 Wong Jika Anda mengikuti "My Computer"> "Properties"> "Advanced"> "Variabel Lingkungan"> "Path". dan tambahkan direktori ke akhir string itu, itu akan tetap. Pastikan untuk membuka konsol setelah melakukan perubahan.
theB3RV

yup @ theB3RV, itu masih jauh untuk melakukan sesuatu yang sederhana. Sungguh aneh bahwa tidak ada perintah persisten yang dapat diketik di konsol
David 天宇 Wong

12
@ David 天宇 Wong Baru ditemukan "SETX adalah cara untuk membuat perubahan terus-menerus, seperti dialog." jadi perintah SETX harus melakukannya
theB3RV

202

PERINGATAN: Solusi ini mungkin merusak PATH Anda, dan stabilitas sistem Anda. Sebagai efek samping, itu akan menggabungkan PATH pengguna dan sistem Anda, dan memotong PATH menjadi 1024 karakter. Efek dari perintah ini tidak dapat diubah. Buat cadangan PATH terlebih dahulu. Lihat komentar untuk informasi lebih lanjut.

Jangan menyalin dan menempelkan ini dengan membabi buta. Gunakan dengan hati-hati.

Anda dapat menambahkan path secara permanenPATH dengan setxperintah:

setx /M path "%path%;C:\your\path\here\"

Hapus /Mbendera jika Anda ingin mengatur pengguna PATHdaripada sistem PATH.

Catatan:

  • The setxPerintah ini hanya tersedia pada Windows 7 dan kemudian.
  • Anda harus menjalankan perintah ini dari prompt perintah yang ditinggikan.

  • Jika Anda hanya ingin mengubahnya untuk sesi saat ini, gunakan set .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"untuk menetapkan nilai PATH pada level mesin
Lu55

7
Mengapa ini bukan jawaban yang diterima? Saya membayangkan sebagian besar orang ingin menetapkan jalan mereka secara permanen ...
Peter Gordon


9
PERINGATAN : Karena penggunaan %PATH%variabel, perintah ini menggabungkan variabel env global dengan yang pengguna. Bukan? Ini dapat menciptakan efek samping yang tidak diinginkan, terutama dengan sakelar / M
FF_Dev

4
PERINGATAN 2: The %PATH%variabel mungkin tidak sinkron dengan variabel lingkungan seperti yang dimuat pada peluncuran command prompt dan tidak pernah mengisi sesudahnya (bahkan ketika menjalankan perintah setX). Juga bisa diubah secara lokal oleh skrip yang dieksekusi sebelumnya.
FF_Dev

66

Anda tidak memerlukan setatau setxperintah apa pun , cukup buka terminal dan ketik:

PATH

Ini menunjukkan nilai variabel PATH saat ini. Sekarang Anda ingin menambahkan direktori ke dalamnya? Cukup ketik:

PATH %PATH%;C:\xampp\php

Jika karena alasan apa pun Anda ingin menghapus variabel PATH (tidak ada jalur sama sekali atau menghapus semua jalur di dalamnya), ketik:

PATH ;

Memperbarui

Seperti Danial Wilson yang dicatat dalam komentar di bawah, itu menetapkan jalur hanya di sesi saat ini. Untuk mengatur jalur secara permanen gunakan setxtetapi waspada, meskipun itu menetapkan jalur secara permanen tetapi TIDAK di sesi saat ini, jadi Anda harus memulai baris perintah baru untuk melihat perubahan, info lebih lanjut di sini .

Untuk memeriksa apakah variabel lingkungan ada atau lihat nilainya gunakan perintah ECHO:

echo %YOUR_ENV_VARIABLE%

1
Berhasil :) bagaimana dengan itu! 'PATH% PATH%;' Saya ingat itu
Dustin Woodard

12
Saya pikir ini hanya berfungsi untuk contoh sesi cmd, gunakan setx untuk mengubahnya secara permanen
Daniel Wilson

2
Jangan sertakan kutipan dengan ini. Misalnya, panggil PATH %PATH%;C:\Program Files\...alih-alihPATH "%PATH%;C:\Program Files\..."
icc97

4
Jangan gunakan setx! Anda berisiko terpotongnya variabel jalur Anda, kehilangan banyak jalur lain yang Anda habiskan untuk pengaturan waktu. Perhatikan peringatan di atas.
STWilson

1
@STWilson, sudah terlambat untuk melihat komentar Anda!
Yang Barat

48

Saya akan menggunakan PowerShell sebagai gantinya!

Untuk menambahkan direktori ke PATH menggunakan PowerShell, lakukan hal berikut:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

Untuk mengatur variabel untuk semua pengguna, di seluruh mesin, baris terakhir harus seperti:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

Dalam skrip PowerShell, Anda mungkin ingin memeriksa keberadaan Anda C:\xampp\phpsebelum menambahkan ke PATH (jika sebelumnya telah ditambahkan). Anda dapat membungkusnya denganif kondisi bersyarat.

Jadi menyatukan semuanya:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

Lebih baik lagi, seseorang dapat membuat fungsi generik. Cukup sediakan direktori yang ingin Anda tambahkan:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

Anda bisa memperbaiki keadaan dengan melakukan pemolesan. Misalnya, gunakan Test-Pathuntuk mengonfirmasi bahwa direktori Anda benar-benar ada.


3
untuk memanggil SetEnvironmentVariabledengan Machineparameter Anda perlu membuka PowerShell dengan hak administrator
InsOp

sangat mengecewakan bahwa shell "power" ini tidak mengenali% userprofile% atau $ userprofile .. tapi sekali lagi, ini adalah windows yang sedang kita bicarakan
abbood

3
@abbood Yang Anda cari adalah $env:userprofile.
nyuszika7h

3
Anda juga harus menentukan salah satu useratau machinedalam panggilan GetEnvironmentVariable. Jika tidak, $PATHakan berisi nilai bagian pengguna dan mesin dari registri yang secara tidak perlu akan meledakkan variabel path ketika menyimpannya lagi.
René Nyffenegger

35

SETX lebih aman

Mengangguk semua komentar pada jawaban awal @NafscriptSETX .

  • SETXsecara default akan memperbarui pengguna Anda jalur .
  • SETX ... /Makan memperbarui sistem Anda jalur .
  • %PATH% berisi jalur sistem dengan jalur pengguna ditambahkan

Peringatan

  1. CadangkanPATH -SETX akan memotong sampah Anda lebih dari 1024 karakter
  2. Jangan panggil SETX %PATH%;xxx - tambahkan jalur sistem ke jalur pengguna
  3. Jangan panggil SETX %PATH%;xxx /M - tambahkan jalur pengguna ke jalur sistem
  4. Penggunaan file batch berlebihan dapat menyebabkan kebutaan 1

Halaman ss64 SETX memiliki beberapa contoh yang sangat bagus. Yang penting itu menunjuk ke tempat kunci registri untuk SETXvsSETX /M

Variabel Pengguna:

HKCU\Environment

Variabel sistem:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Instruksi penggunaan

Tambahkan ke Pengguna PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1

Tambahkan ke Sistem PATH

append_system_path.cmd. Harus dijalankan sebagai admin.

(Pada dasarnya sama kecuali dengan pengubah yang berbeda Keydan SETX /M)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M

Alternatif

Akhirnya ada versi yang berpotensi ditingkatkan yang disebut SETENV direkomendasikan oleh halaman SETX ss64 yang membagi pengaturan variabel lingkungan pengguna atau sistem.


1. Tidak sepenuhnya benar


24

Terlambat ke pesta - tetapi berguna jika Anda sudah berada di direktori yang ingin Anda tambahkan ke PATH.

set PATH=%PATH%;%CD%

sunting: sesuai komentar - bekerja dengan cmd windows standar tetapi tidak di PowerShell.

Untuk PowerShell %CD%setara adalah[System.Environment]::CurrentDirectory


1
Powershell saya mengatakan% CD% tidak dikenali.
Paulo Matos

@PauloMatos Bisa coba gunakan[System.Environment]::CurrentDirectory
nclord

4

Selain semua jawaban, jika Anda ingin alat GUI yang bagus untuk mengedit variabel lingkungan windows Anda, Anda dapat menggunakan Rapid Environment Editor

Cobalah! itu aman untuk digunakan dan luar biasa!

http://www.rapidee.com/en/


2
Windows 10 telah secara signifikan meningkatkan editor variabel Path Environment sekarang. Hanya butuh waktu 20 tahun untuk menyelesaikannya.
icc97

4
  • perubahan baris perintah tidak akan permanen, akan hilang ketika konsol ditutup.
  • Path berfungsi seperti first come first served.
  • Anda mungkin ingin mengganti executable lain yang sudah termasuk. Misalnya jika Anda sudah memiliki versi lain di jalur Anda dan Anda ingin menambahkan versi berbeda tanpa membuat perubahan permanen di jalur Anda harus meletakkan direktori di awal perintah.

Untuk mengganti yang sudah termasuk executable;

atur PATH = C: \ xampp \ php;% PATH%;


2

Memeriksa saran di atas pada Windows 10 LTSB, dan dengan sekilas pada garis "bantuan" (yang dapat dilihat saat mengetik 'perintah /?' Pada cmd), membawa saya pada kesimpulan bahwa perintah PATH mengubah variabel lingkungan sistem Nilai jalur hanya untuk sesi saat ini, tetapi setelah reboot semua nilai diatur ulang ke default-sama seperti sebelum menggunakan perintah PATH.

Di sisi lain, menggunakan perintah SETX dengan hak administratif jauh lebih kuat, ia mengubah nilai-nilai itu untuk selamanya (atau setidaknya sampai waktu berikutnya perintah ini digunakan atau sampai waktu berikutnya nilai-nilai itu dimanipulasi secara manual GUI ...).

Tetapi demi kejelasan, saya pikir berbagi di sini penggunaan sintaks SETX terbaik yang bekerja untuk saya mungkin membantu seseorang suatu hari:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

di mana tanda sama dengan '=' harus dihindari, dan jangan khawatir tentang spasi! tidak perlu memasukkan tanda kutip lagi untuk jalur yang berisi spasi di dalamnya- tanda perpecahan ';' lakukan pekerjaan.

Kata kunci PATH yang mengikuti SETX menentukan set nilai mana yang harus diubah di antara nilai-nilai yang mungkin untuk System Environment Variabel, dan% PATH% (kata PATH dikelilingi oleh tanda persen) di dalam tanda kutip, memberitahu OS untuk meninggalkan yang sudah ada Nilai PATH sebagaimana adanya dan tambahkan jalur berikut (yang mengikuti tanda split ';') ke nilai yang ada.

HTH


2

Mengenai poin 2 saya menggunakan file batch sederhana yang sedang diisi PATHatau variabel lingkungan lainnya untuk saya. Oleh karena itu, tidak ada polusi variabel lingkungan secara default. File batch ini dapat diakses dari mana saja sehingga saya dapat mengetik:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

Ini adalah perbedaan penting antara * nix-es dan Windows. Batch berjalan di shell yang sama, dan perubahan ke lingkungan tetap setelah itu keluar (pada cakupan sesi). Namun, ini memotong kedua cara: file batch dapat melenyapkan lingkungan Anda. (BTW, di * nix-es Anda hanya perlu sourcefile seperti itu, seperti . mybatchfile).
Tomasz Gandor

Hai @ grzegorz-gajos, saya mencari persis itu, tautan Anda untuk rincian lebih lanjut memberikan 404. Ada alternatif?
devkabiir

Maaf, konten dari tautan tidak lagi tersedia. Saya dihapus.
Grzegorz Gajos

1

Dalam prompt perintah, Anda memberi tahu Cmd untuk menggunakan baris perintah Explorer dengan membukanya terlebih dahulu start.

Jadi start Yourbatchname.

Catatan Anda harus mendaftar seolah-olah namanya batchfile.exe.

Program dan dokumen dapat ditambahkan ke dalam registri sehingga mengetik namanya tanpa jalurnya di kotak dialog Start-Run atau pintasan memungkinkan Windows untuk menemukannya.

Ini adalah file reg generik. Salin baris di bawah ini ke Dokumen Teks baru dan simpan sebagai anyname.reg. Edit dengan program atau dokumen Anda.

Di jalur gunakan \ untuk memisahkan nama folder di jalur kunci sebagai regedit menggunakan satu \ untuk memisahkan nama kunci itu. Semua file reg mulai dengan REGEDIT4. Tanda titik koma mengubah garis menjadi komentar. Simbol @ berarti untuk menetapkan nilai pada kunci daripada nilai yang disebutkan.

File tidak harus ada. Ini dapat digunakan untuk mengatur Word.exe untuk membuka Winword.exe.

Pengetikan start batchfileakan mulai iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

Anda telah diberi tahu tentang path pada jawaban lain. Lihat jugadoskey /? makro cmd (mereka hanya bekerja saat mengetik).

Anda dapat menjalankan perintah startup untuk CMD. Dari Referensi Teknis Kit Sumber Daya Windows

AutoRun

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

Deskripsi

Berisi perintah yang dijalankan setiap kali Anda memulai Cmd.exe.


1

Alternatif yang lebih baik untuk Control Panel adalah dengan menggunakan program freeware ini dari sourceforge yang disebut Pathenator:

https://sourceforge.net/projects/pathenator/

Namun, itu hanya pekerja untuk sistem yang memiliki Dot.Net 4.0 atau lebih besar seperti windows 7,8, atau 10.


1

Jika Anda menjalankan perintah cmd, itu akan memperbarui semua variabel sistem untuk jendela perintah itu.


Dalam arti tertentu. Apa yang terjadi adalah Anda memulai sesi baru dalam sesi saat ini. Meninggalkan akan mengharuskan Anda menelepon exitdua kali, pertama untuk menutup yang baru dan kemudian untuk menutup sesi pertama (dengan lingkungan lama).
Farway

1

gunakan pathed dari gtools

itu melakukan hal-hal dengan cara yang intuitif misalnya:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

itu dan menunjukkan hasil tanpa perlu menelurkan cmd baru !


0
  1. Saya telah menginstal PHP saat itu. Diekstraksi php-7 ***. Zip ke C: \ php \
  2. Cadangkan variabel lingkungan PATH saya saat ini: jalankan cmd, dan jalankan perintah:path >C:\path-backup.txt

  3. Dapatkan nilai jalur saya saat ini ke file C: \ path.txt (cara yang sama)

  4. Ubah path.txt (tentu, panjang jalur saya lebih dari 1024 karakter, windows berjalan beberapa tahun)
    • Saya telah menghapus duplikat jalur di sana, seperti 'C: \ Windows; atau C: \ Windows \ System32; atau C: \ Windows \ System32 \ Wbem; - Saya punya dua kali.
    • Hapus jalur program yang dihapus juga. Contoh: C: \ Program Files \ NonExistSoftware;
    • Dengan cara ini, panjang string jalur saya <1024 :)))
    • di akhir string path tambahkan; C: \ php \
    • Salin nilai jalur hanya ke buffer dengan kutipan ganda berbingkai! Contoh: "C: \ Windows; ****; C: \ php \" Tidak ada PATH = harus ada di sana !!!
  5. Buka Windows PowerShell sebagai Administrator.
  6. Jalankan perintah:

setx path "Here you should insert string from buffer (new path value)"

  1. Jalankan kembali terminal Anda (saya menggunakan "Manajer jauh") dan periksa: php -v

0

Mungkin sepele, saya harus me - restart Windows ketika dihadapkan dengan masalah ini.

Saya menjalankan Windows 7 x64. Saya melakukan pembaruan manual ke variabel sistem PATH. Ini berfungsi baik jika saya menjalankan cmd.exe dari menu stat. Tetapi jika saya mengetik "cmd" di bilah alamat Windows Explorer, sepertinya memuat PATH dari tempat lain, yang tidak memiliki perubahan manual.

(Untuk menghindari keraguan - ya, saya menutup dan menjalankan kembali cmd beberapa kali sebelum saya memulai kembali dan itu tidak membantu.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.