Windows'ta PATH Ortam Değişkeni'ne dizin ekleme


525

Windows'ta C:\xampp\phpsistem PATHortamı değişkenime eklemeye çalışıyorum .

Ortam Değişkenleri iletişim kutusunu kullanarak zaten ekledim.

Ancak konsoluma yazdığımda:

C:\>path

yeni C:\xampp\phpdizini göstermez :

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

İki sorum var:

  1. Bu neden oldu? Yanlış yaptığım bir şey var mı?
  2. Ayrıca, PATHkonsolu kullanarak (ve programlı olarak bir toplu iş dosyasıyla) değişkenime nasıl dizin ekleyebilirim ?

43
Bu konuyla ilgili çünkü bu 'programcıların sıkça kullandığı araçlar' hakkında bir soru. Windows üzerinde geliştirirseniz ve PATH'yi değiştirmeniz gerekmediyse şaşırdım. Programlama ile ilgili olma arzusunu tatmin etmek için, en yüksek oyu alan cevabın işaret ettiği şeyi vurguladım: Bunu program aracılığıyla konsoldan (veya bir toplu iş dosyası aracılığıyla) yapabilirsiniz.
George Stocker

1
İnceleme için teşekkürler @GeorgeStocker iyi evet programlı olarak yaptım ve sadece konsol oturumunda değişiklikler uyguladıktan sonra yeniden giriş yapmam gerektiği hakkında bir fikrim yoktu. (ve bence bu sadece benim durumumda) ama en yüksek oyu alan cevap genellikle soruyu cevaplar
Netorica

1
@George - kabul etti, ancak durduğu gibi, bu soru Yığın Taşması için değil Süper Kullanıcı için yazılmıştır. Süper Kullanıcı, kişisel kullanım için web sunucusu yapılandırmalarıyla ilgili yardım sağlayacaktır. Yığın Taşması soruları programlamak içindir.
jww

1
Yeni bir konsoldan çıkın ve açın ... bash kullanıyorsanız, nasıl / ne kullandığınıza bağlı olarak değişikliklerin devam etmesi için sistemin yeniden başlatılması gerekebilir.
Tracker1

Yanıtlar:


148

Bu yalnızca kayıt defterini değiştirir. Mevcut bir işlem bu değerleri kullanmayacaktır. Başlatıldığında durumunda yeni süreç bunu yapacağız sonra bu değişimden ve üst öğesinden eski çevre bırakabilmek etmez.

Konsol oturumunu nasıl başlattığınızı belirtmediniz. Bunu sağlamanın en iyi yolu komut kabuğundan çıkmak ve yeniden çalıştırmaktır. Daha sonra güncellenmiş PATH'yi miras almalıdır.


9
Hmm, hayır, gerçekten sadece kayıt defterini değiştiriyor. Diyelim ki PATH komutuyla komut istemi yerine bir Denetim Masası iletişim kutusunda bunu yapmaktan biraz açık olmalıdır. Eğer ilgilenirseniz, SysInternals'ın İşlem Monitörü ile ne yaptığını kolayca görebilirsiniz. PATH kullanımı aynı değildir , konsol kapatıldığında yaptığınız değişiklikler kaybolacaktır. SETX, diyalog gibi kalıcı değişiklikler yapmanın bir yoludur.
Hans Passant

3
Doğru. Yeni ortam değişkenlerini almadan önce konsol oturumunuzu her zaman yeniden başlatmanız gerekir.
BrainSlugs83

1
Bir uygulamadan WM_SETTINGCHANGEmesaj gönderilirse konsol oturumu değişkenleri günceller mi? stackoverflow.com/a/8358361
John_West

Teorik olarak mümkün, bildiğim pratik bir CRT uygulaması aslında bunu yapmıyor. Explorer yapar.
Hans Passant


960

seçenek 1

PATHGUI ile değiştirdikten sonra , konsol penceresini kapatıp yeniden açın.

Bu, yalnızca değişiklikten sonra başlatılan programlar yenisini göreceği için çalışır PATH.

seçenek 2

Açtığınız komut penceresinde bu komutu yürütün:

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

Bu komut C:\your\path\here\akıma eklenir PATH.

Yıkmak:

  • set- cmd'nin ortam değişkenlerini yalnızca geçerli cmd oturumu için değiştiren komut ; diğer programlar ve sistem etkilenmez.
  • PATH=- PATHGeçici olarak değiştirilecek ortam değişkeni olduğunu gösterir.
  • %PATH%;C:\your\path\here\- %PATH%Parça geçerli değerine genişler PATHve ;C:\your\path\here\sonra birleştirilir. Bu yeni oluyor PATH.

16
@Ilya: MyComputer-> Properties-> Advanced-> Env Değişkenleri-> Path'da yol değiştirildikten sonra konsol penceresini açmanız istedim. Bazı Windows uygulamaları, başlatıldıktan sonra ortam değişkeni değişikliklerini yayar, bazıları da uygulamaz. WinXP cmd.exe çalışmıyor.
JimR

7
konsoldan çıkar ve yolu yeniden çalıştırırsam yolu sıfırlamam gerekir. Bu değişikliğin nasıl kalıcı hale getirileceği hakkında bir fikrin var mı?
David 天宇 Wong

2
@David 天宇 Wong "Bilgisayarım"> "Özellikler"> "Gelişmiş"> "Ortam Değişkenleri"> "Yol" u izlerseniz. ve dizini bu dizenin sonuna eklerseniz, kalır. Değişikliği yaptıktan sonra konsolu açtığınızdan emin olun.
theB3RV

yup @ theB3RV, basit bir şey yapmanın sadece uzun bir yolu. Konsolda yazılabilecek
kalıcı bir

12
@David 天宇 Wong Az önce "SETX, diyalog gibi kalıcı değişiklikler yapmanın bir yoludur." SETX komutu bunu yapmalı
theB3RV

202

UYARI: Bu çözüm PATH'nizi ve sisteminizin stabilitesini tahrip edebilir . Bir yan etki olarak, kullanıcı ve sistem PATH'inizi birleştirecek ve PATH'ı 1024 karaktere kesecektir. Bu komutun etkisi geri döndürülemez. Önce PATH yedeğini alın. Daha fazla bilgi için yorumlara bakın.

Bunu körü körüne kopyalayıp yapıştırmayın. Dikkatle kullanın.

Sen edebilir kalıcı bir yol eklemek PATHile setxkomuta:

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

/MKullanıcıyı PATHsistem yerine ayarlamak istiyorsanız bayrağı kaldırın PATH.

Notlar:

  • setxKomut daha sonra Windows 7 ve yalnızca kullanılabilir.
  • Bu komutu yükseltilmiş bir komut isteminden çalıştırmalısınız.

  • Yalnızca geçerli oturum için değiştirmek isterseniz, kullanmak seti .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"düzeyinde makine PATH değerini ayarlama
Lu55 29:15

7
Bu neden kabul edilen cevap değil? Çoğu insanın yolunu kalıcı olarak belirlemek istediğini düşünürdüm ...
Peter Gordon

8
Ayrıca bkz.
Setx

9
UYARI : %PATH%Değişken kullanımı nedeniyle , bu komut genel env değişkenlerini kullanıcı değişkenleriyle birleştirir. Öyle değil mi? Bu, özellikle / M anahtarı ile istenmeyen yan etkiler
yaratabilir

4
2 UYARI:%PATH% o istemi komutunun açılışında yüklenen ve asla sonra tekrar yüklendiğinde olarak değişken ortam değişkenleri ile senkronize olmayabilir (hatta setx komutu yürütürken). Ayrıca daha önce yürütülen komut dosyaları tarafından yerel olarak değiştirilmiş olabilir.
FF_Dev

66

Herhangi bir komut setveya setxkomut gerekmez , sadece terminali açın ve şunu yazın:

PATH

Bu, PATH değişkeninin geçerli değerini gösterir. Şimdi ona dizin eklemek ister misiniz? Basitçe şunu yazın:

PATH %PATH%;C:\xampp\php

Herhangi bir nedenle PATH değişkenini temizlemek istiyorsanız (hiç yol yok veya içindeki tüm yolları silmek), şunu yazın:

PATH ;

Güncelleme

Danial Wilson'un aşağıdaki yorumda belirttiği gibi, sadece mevcut oturumda yolu belirliyor. Yolu kalıcı olarak ayarlamak için setx, ancak geçerli oturumda yolu kalıcı olarak ayarlamasa da , unutmayın, bu yüzden değişiklikleri görmek için yeni bir komut satırı başlatmanız gerekir, daha fazla bilgi burada .

Çevresel bir değişken olup olmadığını kontrol etmek veya değerini görmek için ECHO komutunu kullanın:

echo %YOUR_ENV_VARIABLE%

1
Bu işe yaradı :) buna ne dersin! '% PATH% PATH%;' Hatırlayabilirim
Dustin Woodard

12
Bence bu sadece cmd oturumu için işe yarıyor, kalıcı olarak değiştirmek için setx kullan
Daniel Wilson

2
Buna tırnak işareti eklemeyin. ÖrneğinPATH %PATH%;C:\Program Files\...PATH "%PATH%;C:\Program Files\..."
icc97

4
Setx kullanmayın! Zaman ayarını harcadığınız diğer birçok yolu kaybederek yol değişkeninizin kesilmesi riskini alırsınız. Yukarıdaki uyarıları dikkate alın.
STWilson

1
@STWilson, yorumunuzu görmek için çok geç!
West Yang

48

Bunun yerine PowerShell kullanırdım!

PowerShell kullanarak PATH'ye bir dizin eklemek için aşağıdakileri yapın:

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

Değişkeni makine genelindeki tüm kullanıcılar için ayarlamak için son satır aşağıdaki gibi olmalıdır:

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

Bir PowerShell betiğinde, C:\xampp\phpPATH'e eklemeden önce (önceden eklenmişse) hesabınızın varlığını kontrol etmek isteyebilirsiniz . Bir ifkoşullu olarak sarabilirsiniz .

Yani hepsini bir araya getirmek:

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

Daha da iyisi, genel bir işlev yaratılabilir. Eklemek istediğiniz dizini sağlamanız yeterlidir:

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")
    }
}

Biraz parlatma yaparak işleri daha iyi hale getirebilirsiniz. Örneğin, Test-Pathdizininizin gerçekten var olduğunu onaylamak için kullanma .


3
parametre SetEnvironmentVariableile arama yapmak için Machine, PowerShell'i yönetici haklarıyla açmanız gerekir
InsOp

bu "güç" kabuğunun% userprofile% veya $ userprofile'ı tanımaması üzücü bir şekilde hayal kırıklığı yaratıyor ... ama yine de, bahsettiğimiz pencereler
abbood

3
@abbood Aradığınız şey $env:userprofile.
nyuszika7h

3
Ayrıca ya userda machineçağrısında belirtmelisiniz GetEnvironmentVariable. Aksi takdirde, $PATHkayıt defterinin kullanıcı ve makine bölümünün değerini içerecek ve bu da yol değişkenini tekrar saklarken gereksiz yere havaya uçuracaktır.
René Nyffenegger

35

Daha Güvenli SETX

@ Nafscript'in ilk SETXcevabındaki tüm yorumları işaretleyin .

  • SETXvarsayılan olarak kullanıcı yolunuzu güncelleyecektir .
  • SETX ... /Msistem yolunuzu güncelleyecektir .
  • %PATH% kullanıcı yolu eklenmiş sistem yolu içeriyor

Uyarılar

  1. YedeklemePATH - SETXönemsizinizi 1024 karakterden daha uzun kesecek
  2. AramaSETX %PATH%;xxx - kullanıcı yoluna sistem yolu ekler
  3. AramaSETX %PATH%;xxx /M - sistem yoluna kullanıcı yolu ekler
  4. Aşırı toplu dosya kullanımı körlüğe neden olabilir 1

Ss64 SETX sayfa bazı çok iyi örnekler vardır. Daha da önemlisi, kayıt defteri anahtarlarının SETXvsSETX /M

Kullanıcı Değişkenleri:

HKCU\Environment

Sistem Değişkenleri:

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

Kullanım talimatları

Kullanıcıya Ekle 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

Sisteme Ekle PATH

append_system_path.cmd. Yönetici olarak çalıştırılmalıdır.

(temelde farklı Keyve SETX /Mdeğiştirici hariç aynıdır )

@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

Alternatifler

Son olarak geliştirilmiş bir versiyonu olarak adlandırılan potansiyel var SetEnv ss64 SETX sayfası tarafından tavsiye edilen kullanıcı veya sistem ortam değişkenleri belirleyerek bunları böler.


1. Kesinlikle doğru değil


24

Partiye geç - ancak zaten PATH'e eklemek istediğiniz dizindeyseniz kullanışlıdır.

set PATH=%PATH%;%CD%

edit: yorum başına - standart windows cmd ile çalışır, ancak powershell değil.

Powershell için %CD%eşdeğer[System.Environment]::CurrentDirectory


1
Powershell'im% CD% tanınmadığını söylüyor.
Paulo Matos

@PauloMatos Kullanabilir miyim[System.Environment]::CurrentDirectory
nclord


4
  • komut satırı değişiklikleri kalıcı olmayacak, konsol kapatıldığında kaybolacaktır.
  • İlk önce gelen yol çalışır.
  • Zaten dahil edilmiş olan diğer yürütülebilir dosyaları geçersiz kılmak isteyebilirsiniz. Örneğin, yolunuzda zaten başka bir sürümünüz varsa ve yolda kalıcı bir değişiklik yapmadan farklı bir sürüm eklemek istiyorsanız, dizini komutun başına koymalısınız.

Zaten dahil edilen yürütülebilir dosyaları geçersiz kılmak için;

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


2

Windows 10 LTSB'de yukarıdaki önerileri kontrol etmek ve "yardım" ana hatlarına bir bakış (cmd üzerinde 'command /?' Yazarken görüntülenebilir), PATH komutunun sistem ortam değişkenini değiştirdiği sonucuna vardı Yol değerleri yalnızca geçerli oturum için, ancak yeniden başlatıldıktan sonra PATH komutunu kullanmadan önceki tüm değerlerine sıfırlanır.

Öte yandan, SETX komutunu yönetici ayrıcalıklarıyla kullanmak çok daha güçlüdür, bu değerleri iyi olarak değiştirir (veya en azından bu komutun bir sonraki kullanılmasına veya bu değerlerin manuel olarak GUI manipüle edilmesine kadar ...).

Ancak netlik açısından, burada benim için çalışan en iyi SETX sözdizimi kullanımını paylaşmanın bir gün birine yardımcı olabileceğini düşündüm:

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

'=' eşittir işaretinden kaçınılmalı ve boşluklar için endişelenmeyin! içinde boşluklar bulunan bir yol için daha fazla tırnak işareti eklemenize gerek yoktur - bölünmüş işaret ';' işi yap.

SETX'i izleyen PATH anahtar sözcüğü, Sistem Ortam Değişkenleri olası değerleri arasında hangi değer kümesinin değiştirilmesi gerektiğini tanımlar ve tırnak işaretleri içindeki% PATH% (yüzde işareti ile çevrili PATH sözcüğü), işletim sisteminden var olanı bırakmasını söyler PATH değerlerini oldukları gibi yapın ve mevcut değerlere aşağıdaki yolu (';' işaretini izleyen yolu) ekleyin.

HTH


2

2. nokta ile ilgili olarak benim için basit bir toplu iş dosyası PATHya da diğer ortam değişkenlerini kullanıyorum. Bu nedenle, varsayılan olarak ortam değişkenlerinin kirliliği yoktur. Bu toplu iş dosyasına her yerden erişilebilir, böylece yazabilirim:

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

Bu, * nix-es ve Windows arasındaki önemli bir farktır. Toplu iş aynı kabukta çalışır ve ortamdan çıktıktan sonra ortamdaki değişiklikler (oturum kapsamında). Ancak, bu iki yolu da keser: bir toplu iş dosyası ortamınızı yok edebilir. (BTW, * nix-es'de sourceböyle bir dosyaya ihtiyacınız olacak gibi . mybatchfile).
Tomasz Gandor

Merhaba @ grzegorz-gajos, tam olarak bunu arıyordum, daha fazla ayrıntı için bağlantınız 404 verir. Alternatif var mı?
devkabiir

Maalesef, bağlantıdaki içerik artık mevcut değil. Kaldırdım.
Grzegorz Gajos

1

Komut isteminde Cmd'e Explorer'ın komut satırını ön tarafından kullanarak kullanmasını söylersiniz start.

Yani start Yourbatchname.

Adı sanki kayıt olmanız gerektiğini unutmayın batchfile.exe.

Programlar ve belgeler kayıt defterine eklenebilir, bu nedenle Başlat - Çalıştır iletişim kutusuna yollarını kullanmadan adlarını yazmak veya kısayol Windows'un bunları bulmasını sağlar.

Bu genel bir reg dosyasıdır. Aşağıdaki satırları yeni bir Metin Belgesine kopyalayın ve anyname.reg kaydedin. Programlarınız veya belgelerinizle düzenleyin.

Yollarda, regedit anahtar adlarını ayırmak için tek bir \ kullandığından, yol yollarındaki klasör adlarını ayırmak için \ kullanın. Tüm reg dosyaları REGEDIT4 ile başlar. Noktalı virgül, bir satırı yoruma dönüştürür. @ Sembolü, değeri adlandırılmış bir değer yerine anahtara atamak anlamına gelir.

Dosyanın mevcut olması gerekmez. Bu, Word.exe'yi Winword.exe dosyasını açacak şekilde ayarlamak için kullanılabilir.

Yazma start batchfileiexplore.exe başlayacaktır.

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\\"

Size başka bir cevapta yol hakkında zaten bilgi verildi. Ayrıca doskey /?cmd makroları için bakın (yalnızca yazarken çalışırlar).

CMD için başlatma komutlarını çalıştırabilirsiniz. Windows Recource Kit Teknik Başvurusu'ndan

AutoRun

HKCU\Software\Microsoft\Command Processor 

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

Açıklama

Cmd.exe'yi her başlattığınızda yürütülen komutları içerir.



1

Komutu çalıştırırsanız, cmdbu komut penceresi için tüm sistem değişkenlerini güncelleştirir.


Bir anlamda. Olan şey şu anki oturumda yeni bir oturum başlatmanızdır. Ayrılmak için exitönce yeni olanı ve ardından ilk oturumu (eski ortamla) kapatmak için iki kez arama yapmanız gerekir .
Farway

1

gtools'tan yol kullan

işleri sezgisel bir şekilde yapar, örneğin:

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

ve yeni bir cmd ortaya çıkmasına gerek kalmadan sonuçları gösterir !


0
  1. PHP'yi o zaman yükledim. Çıkarılan . Php-7 *** zip içine C: \ php \
  2. Geçerli PATH ortam değişkenimi yedekle: run cmdve execute komutu:path >C:\path-backup.txt

  3. Geçerli yol değerimi C: \ path.txt dosyasına al (aynı şekilde)

  4. Path.txt dosyasını değiştir (elbette, yol uzunluğum 1024 karakterden fazla, pencereler birkaç yıl çalışıyor)
    • Orada 'C: \ Windows gibi yinelenen yolları kaldırdım ; veya C: \ Windows \ System32; veya C: \ Windows \ System32 \ Wbem; - İki kere aldım.
    • Kaldırılan program yollarını da kaldırın. Örnek: C: \ Program Files \ NonExistSoftware;
    • Bu şekilde, yol dizgi uzunluğum <1024 :)))
    • yol dizesinin sonuna ekleyin; C: \ php \
    • Yol değerini yalnızca çerçeveli çift tırnak işareti ile tampon içine kopyalayın ! Örnek: "C: \ Windows; ****; C: \ php \" YOK YOK = orada olmalı !!!
  5. Windows PowerShell'i Yönetici olarak açın.
  6. Çalıştır komutu:

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

  1. Terminalinizi yeniden çalıştırın ("Uzak yönetici" kullanıyorum) ve şunları kontrol edin: php -v

0

Olabildiğince önemsiz , bu sorunla karşılaştığında Windows'u yeniden başlatmak zorunda kaldım .

Windows 7 x64 kullanıyorum. Sistem PATH değişkenine manuel güncelleme yaptım. Stat menüsünden cmd.exe çalıştırırsanız bu iyi çalıştı. Ancak, Windows Gezgini adres çubuğuna "cmd" yazarsam, PATH'yi başka bir yerden yüklüyor gibi görünüyor, ki bu da benim manuel değişikliklerim yoktu.

(Şüpheyi önlemek için - evet, yeniden başlatmadan önce birkaç kez cmd'yi kapattım ve tekrar çalıştırdım ve yardımcı olmadı.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.