Sistem ve kullanıcı ortam değişkenlerini görüntülemek, oluşturmak, düzenlemek ve yönetmek için bilmeniz gereken her şey — grafik arayüzden PowerShell'e kadar.
Ortam değişkenleri, işletim sistemi tarafından depolanan ve programlar, betikler ile kabuğun kendisi tarafından kullanılan yapılandırma bilgilerini tutan adlandırılmış anahtar-değer çiftleridir. Bunları, çalışan herhangi bir işlemin okuyabileceği — yollara veya değerlere doğrudan kod içinde yer vermeden — küresel bir ayarlar deposu olarak düşünebilirsiniz.
Örneğin, çok bilinen PATH değişkeni, Komut İstemi'ne bir komut yazdığınızda Windows'a nereye bakacağını söyler. Her seferinde C:\Windows\System32\notepad.exe yazmak yerine sadece notepad yazarsınız — çünkü C:\Windows\System32 zaten PATH içinde listelenmiştir.
Ortam değişkenleri, Windows NT 3.1'den bu yana Windows'un temel bir parçasıdır ve davranışları Windows 10 ile Windows 11'de neredeyse aynıdır. Grafik arayüz iletişim kutuları Windows 11'in görsel yenilemesi nedeniyle biraz farklı görünse de altta yatan kayıt defteri konumları, miras alma kuralları ve komut satırı araçları tamamen aynı şekilde çalışır.
Geliştiriciler, sistem yöneticileri ve ileri düzey kullanıcılar ortam değişkenlerine geniş bir yelpazede görevler için güvenir: API anahtarları gibi hassas verileri kaynak kodun dışında saklamak, uygulamaların çalışma zamanı davranışını yeniden derlemeye gerek kalmadan yapılandırmak, herhangi bir makinede çalışan taşınabilir betikler oluşturmak ve Python, Java, Node.js ve Git gibi araçların kurulum yollarını tanımlamak.
Windows, ortam değişkenleri için dört farklı kapsam tanır. Kapsamı anlamak kritik öneme sahiptir; çünkü bir düzeyde tanımlanan değişken, başka bir düzeydeki değişkeni geçersiz kılabilir, onun tarafından geçersiz kılınabilir ya da başka bir düzey için görünmez olabilir.
Kullanıcı hesabı bazında tanımlanır. Kayıt defterinde HKCU\Environment altında saklanır. Yalnızca o kullanıcı altında çalışan işlemler için geçerlidir. Aynı ada sahip makine değişkenlerine göre önceliklidir (PATH hariç).
Bilgisayardaki tüm kullanıcılar için geçerlidir. HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment altında saklanır. Değiştirmek için Yönetici ayrıcalıkları gerekir.
Yalnızca tek bir işlemin ve alt işlemlerinin çalışma süresi boyunca var olur. CMD'de set veya PowerShell'de $env: ile ayarlanır. İşlem sona erdiğinde değişiklikler atılır.
HKCU\Volatile Environment altında saklanan özel bir alt küme. Her oturum açışta yeniden oluşturulur (ör. SESSIONNAME, LOGONSERVER). Oturum kapanınca kaybolur ve kullanıcı tarafından düzenlenemez.
Çoğu değişken için, her ikisi de aynı adla mevcutsa kullanıcı değişkenleri sistem değişkenlerine göre önceliklidir. Önemli istisna PATH'tir: Windows, sistem PATH'i ile kullanıcı PATH'ini birleştirir (önce sistem, sonra kullanıcı); böylece her ikisi de çalışan herhangi bir işlem tarafından görülen nihai değere katkıda bulunur.
Ortam Değişkenleri iletişim kutusunu açmanın birkaç yolu vardır. Aşağıda, Windows 10 ve Windows 11'de çalışan en güvenilir yöntemler listelenmiştir:
Win + R tuşlarına basın, sysdm.cpl yazın ve Enter'a basın.Win + S tuşlarına basın.Win + R tuşlarına basın.rundll32 sysdm.cpl,EditEnvironmentVariables yazın ve Enter'a basın.rundll32 sysdm.cpl,EditEnvironmentVariables komutunu masaüstünde kısayol olarak kaydedin. Herhangi bir Windows 10/11 sisteminde tek tıkla iletişim kutusuna ulaşmanın en hızlı yoludur.
Komut satırı, herhangi bir grafik iletişim kutusu açmadan ortam değişkeni değerlerine hızlı ve betiklenebilir erişim sunar.
CMD — tüm değişkenleri listelemeset
CMD — belirli bir değişkeni görüntülemeecho %VARIABLE_NAME%
echo %PATH%
echo %USERNAME%
CMD — değişkenleri önek ile filtrelemeset APP_
Argümansız set yazmak, geçerli işlemde mevcut tüm ortam değişkenlerini listeler. set ÖNEK yazmak (eşittir işareti olmadan) adı bu önekle başlayan tüm değişkenleri listeler — JAVA_ veya PYTHON ile ilgili tüm değişkenleri hızla kontrol etmek için çok kullanışlıdır.
PowerShell — tüm değişkenleri listelemeGet-ChildItem Env:
PowerShell — belirli bir değişkeni okuma$env:PATH
$env:USERNAME
$env:APPDATA
PowerShell — filtreleme ve biçimlendirmeGet-ChildItem Env: | Where-Object { $_.Name -like "APP_*" }
Get-ChildItem Env: | Sort-Object Name | Format-Table -AutoSize
PowerShell — kayıt defterinden kalıcı kullanıcı değişkenini okuma[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "User")
[System.Environment]::GetEnvironmentVariable("VARIABLE_NAME", "Machine")
MY_APP_ROOT) ve Değişken değerini (ör. C:\MyApp) girin.CMD — geçerli oturum için değişken ayarlamaset MY_VARIABLE=MerhabaDunya
set APP_ENV=production
CMD — geçerli oturumdan değişken silmeset MY_VARIABLE=
CMD — kalıcı kullanıcı değişkeni oluşturmasetx MY_VARIABLE "MerhabaDunya"
CMD — kalıcı sistem değişkeni oluşturma (Yönetici gerektirir)setx MY_VARIABLE "MerhabaDunya" /M
setx kayıt defterine yazar ve gelecekteki işlemleri etkiler, ancak geçerli CMD oturumunun ortamını güncellemez. Yeni değeri görmek için yeni bir CMD penceresi açmanız gerekir. Ayrıca setx, 1.024 karakterden uzun değerleri sessizce keser — PATH'e girdi eklerken sık karşılaşılan bir tuzak.
PATH değişkeni, tartışmasız en önemli ve en sık değiştirilen ortam değişkenidir. Tam yolunu belirtmeden bir program çalıştırdığınızda Windows'un sırayla aradığı dizinlerin noktalı virgülle ayrılmış listesidir.
Windows 10 ve 11, her girişi kendi satırında gösteren özel bir PATH düzenleyici içerir; bu da ham noktalı virgülle ayrılmış dizeyi elle düzenlemeye kıyasla yönetimi çok daha kolaylaştırır.
Path'i seçin.PowerShell — kullanıcı PATH'ine kalıcı olarak ekleme$current = [System.Environment]::GetEnvironmentVariable("Path", "User")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "User")
PowerShell — sistem PATH'ine ekleme (Yönetici olarak çalıştır)$current = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$newEntry = "C:\MyTool\bin"
[System.Environment]::SetEnvironmentVariable("Path", "$current;$newEntry", "Machine")
PowerShell'in [System.Environment] .NET sınıfı ve Env: sağlayıcısı, ortam değişkenlerinin tüm kapsamları üzerinde tam ve betiklenebilir denetim sağlar.
PowerShell — kalıcı kullanıcı değişkeni ayarlama[System.Environment]::SetEnvironmentVariable("API_KEY", "abc123xyz", "User")
PowerShell — kalıcı sistem değişkeni ayarlama (Yönetici gerektirir)[System.Environment]::SetEnvironmentVariable("DB_HOST", "prod-db-01", "Machine")
PowerShell — kullanıcı değişkenini silme[System.Environment]::SetEnvironmentVariable("API_KEY", $null, "User")
PowerShell — yalnızca geçerli oturum için değişken ayarlama$env:MY_TEMP_VAR = "gecici_deger"
Remove-Item Env:MY_TEMP_VAR
PowerShell — tüm kullanıcı değişkenlerini dosyaya aktarmaGet-ChildItem Env: | Export-Csv -Path "$HOME\env_backup.csv" -NoTypeInformation
PowerShell — .env dosyasından değişken içe aktarma (yaygın desen)Get-Content ".env" | ForEach-Object {
if ($_ -match "^([^#=]+)=(.*)$") {
[System.Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), "User")
}
}
WM_SETTINGCHANGE mesajı yayınlayabilirsiniz. Bu teknik, Chocolatey ve Scoop gibi birçok kurulum programı tarafından kullanılmaktadır.
Windows, zengin bir önceden tanımlanmış ortam değişkenleri kümesiyle birlikte gelir. Bunları bilmek zaman kazandırır ve betiklerin farklı makineler ve kullanıcılar arasında taşınabilir olmasını sağlar.
| Değişken | Tipik Değer | Açıklama |
|---|---|---|
%USERNAME% |
ahmet.yilmaz |
Şu an oturum açmış kullanıcının hesap adı. |
%USERPROFILE% |
C:\Users\ahmet.yilmaz |
Geçerli kullanıcının ev klasörünün tam yolu. |
%APPDATA% |
C:\Users\ahmet.yilmaz\AppData\Roaming |
Geçerli kullanıcı için dolaşımlı uygulama veri klasörü. |
%LOCALAPPDATA% |
C:\Users\ahmet.yilmaz\AppData\Local |
Yerel (dolaşımsız) uygulama veri klasörü. |
%TEMP% / %TMP% |
C:\Users\ahmet.yilmaz\AppData\Local\Temp |
Geçici dosyalar dizini. Düzenli aralıklarla güvenle temizlenebilir. |
%SYSTEMROOT% |
C:\Windows |
Windows kurulumunun kök dizini. |
%SYSTEMDRIVE% |
C: |
Sistem sürücüsünün sürücü harfi. |
%WINDIR% |
C:\Windows |
%SYSTEMROOT%'un takma adı. Eski uygulamalar tarafından kullanılır. |
%PROGRAMFILES% |
C:\Program Files |
64 bit programlar için varsayılan kurulum klasörü. |
%PROGRAMFILES(X86)% |
C:\Program Files (x86) |
64 bit Windows'ta 32 bit programlar için varsayılan kurulum klasörü. |
%COMPUTERNAME% |
DESKTOP-ABC123 |
Bilgisayarın NetBIOS adı. |
%OS% |
Windows_NT |
Modern Windows'ta her zaman Windows_NT. Eski toplu iş betiklerinde işletim sistemi algılama amacıyla kullanılır. |
%PROCESSOR_ARCHITECTURE% |
AMD64 |
Geçerli işlemin CPU mimarisi (AMD64, x86, ARM64). |
%PATH% |
(birleşik liste) | Çalıştırılabilir dosyaları aramak için taranan, noktalı virgülle ayrılmış dizin listesi. |
%PATHEXT% |
.COM;.EXE;.BAT;… |
PATH'te arama yaparken Windows'un çalıştırılabilir kabul ettiği dosya uzantıları. |
%PUBLIC% |
C:\Users\Public |
Bilgisayardaki tüm kullanıcıların erişebildiği ortak paylaşımlı klasör. |
Bu değişkenlerin herhangi birini Dosya Gezgini'nin adres çubuğunda, Çalıştır iletişim kutusunda (Win+R), toplu iş betiklerinde ve PowerShell'de yüzde işaretleriyle çevreleyerek (%DEĞİŞKEN%) veya $env:DEĞİŞKEN söz dizimini kullanarak kullanabilirsiniz.
Değişiklikler açık uygulamalarda geçerli olmuyor. Ortam değişkeni değişiklikleri yalnızca bir işlem başlatıldığında okunur. Uygulamayı, terminali veya IDE'yi kapatıp yeniden açmanız gerekir. Oturumu kapatıp tekrar açmak, tüm işlemlerin güncellenmiş değerleri almasını sağlar.
PATH'e ekledikten sonra komut bulunamıyor. Önce yeni bir CMD penceresinde echo %PATH% komutuyla yolun doğru eklenip eklenmediğini doğrulayın. Yazım hatalarını, eksik ters eğik çizgileri veya fazladan boşlukları kontrol edin. Doğru kapsamı (kullanıcı veya sistem) düzenleyip düzenlemediğinizden emin olun.
PATH kesilmiş görünüyor — girişler eksik. Bu, eski setx komutunun veya eski kayıt defteri araçlarının 1.024 karakter sınırından kaynaklanır. 32.767 karaktere kadar yol destekleyen grafik PATH düzenleyicisini veya PowerShell'in [System.Environment] yöntemini kullanın (Windows kayıt defteri sınırı).
Sistem değişkenleri geçerli kullanıcı için görünmüyor. Ortam Değişkenleri iletişim kutusundaki hem kullanıcı hem de sistem bölümlerini kontrol edin veya birleşik sonucu gösteren CMD'de set kullanın. Bir sistem değişkeni hâlâ görünmüyorsa Grup İlkesi'ni kontrol edin — değişkenleri geçersiz kılabilir ya da gizleyebilir.
Bir uygulama ortam değişkenini yok sayıyor. Bazı uygulamalar başlangıçta ortam değişkenlerini önbelleğe alır ve çalışma sırasında yeniden okumaz. Uygulamayı yeniden başlatın. Bazıları ayrıca değişkenin, uygulamayı başlatan hizmet başlamadan önce ayarlanmış olmasını gerektirir; bu durumda sistem yeniden başlatması gerekebilir.
set > "%USERPROFILE%\Desktop\env_backup.txt" komutunu çalıştırın. Bu, bir şeyler ters giderse geri yükleme başvurusu sağlar.
PATH hariç. Tek kullanıcıysanız ve yönetici haklarına sahipseniz pratik fark azdır; paylaşılan makineler veya denetlenen ortamlar için sistem değişkenleri, makine genelindeki ayarlar için doğru seçimdir.
Path'i seçin, Düzenle'ye ardından Yeni'ye tıklayın ve dizini yapıştırın (ör. Python için C:\Python312 ve C:\Python312\Scripts, Node.js için C:\Program Files\nodejs). Onaylamak için yeni bir CMD penceresi açın ve python --version veya node --version yazın.
C:\Program Files\...). CMD'de böyle bir değişkeni kullanırken genişlemeyi tırnak içine alın: "%BENIM_YOLUM%". Değişken adları alt çizgilerle alfasayısal olmalıdır — adlarda boşluk ve özel karakterlerden kaçının. Grafik arayüz aracılığıyla bir değişken değerinin içine gerçek tırnak işaretleri eklemeyin; oldukları gibi saklanır ve betikler değişkeni genişlettiğinde beklenmedik davranışlara yol açabilir.
%PATH%, %path% ve %Path% hepsi aynı değişkene başvurur. Bu durum, PATH ve path'in iki farklı değişken olacağı Linux/macOS'tan farklıdır. Gelenek olarak Windows ortam değişkeni adları BÜYÜK HARFLERLE yazılır, ancak bu tamamen stilistiktir.
UYGULAMAM_API_KEY gibi açık, ad alanlı bir ad kullanın. Ortam değişkenlerinin Windows kayıt defterinde düz metin olarak saklandığını — şifrelenmediğini — unutmayın. Kullanıcı hesabınız altında çalışan herhangi bir işlem bunları okuyabilir. Daha yüksek güvenlik için Windows Kimlik Bilgisi Yöneticisi'ni, Azure Key Vault'u veya sürüm denetiminin dışında tutulan .env dosyalarıyla birlikte direnv gibi araçları değerlendirin. Gizli bilgi içeren ortam değişkenlerini hiçbir zaman kaynak kodu depolarına göndermeyin.
REG_EXPAND_SZ için 32.767 karaktere kadar değerleri destekler. Ancak eski setx komutu, 1.024 karakterden uzun değerleri sessizce keser — bilinen bir sınırlama. Uzun değerleri güvenle yönetmek için (özellikle PATH) her zaman grafik düzenleyiciyi veya bu kısıtlama olmadan doğrudan kayıt defteriyle iletişim kuran PowerShell'deki [System.Environment]::SetEnvironmentVariable() yöntemini kullanın.
Ortam değişkenleri, Windows yapılandırmasının temel bir parçasıdır — bunlara hakim olmak sizi geliştirici, sistem yöneticisi veya ileri düzey kullanıcı olarak önemli ölçüde daha üretken kılar. Güvenli ve görsel PATH yönetimi için grafik düzenleyiciyi; karakter sınırı olmaksızın kapsam farkındalıklı otomasyon için PowerShell'in [System.Environment] API'sini; sistem kayıt defterini kirletmeyen geçici oturum değerleri için ise set/$env: komutlarını kullanın.
İster Windows 10 ister Windows 11 kullanıyor olun, altta yatan mekanizmalar aynıdır — yalnızca görsel tasarım farklılık gösterir. Kullanıcı ile sistem kapsamı arasındaki farkı, PATH birleştirme davranışını ve işlem mirasının nasıl çalıştığını kavradığınızda, birkaç dakika içinde teşhis edip çözemeyeceğiniz sorunlarla nadiren karşılaşırsınız.