Komut satırı aracılığıyla sistemin PATH değişkenine kalıcı olarak nasıl bir girdi ekleyebilirim?


13

Yapmam gerekenler:

  • %PATH%Ortam değişkenine SİSTEM düzeyinde bir klasör ekleyin .
  • Değişikliği kalıcı hale getirin.

Nasıl yapmam gerekiyor:

  • Komut istemini veya gerekli tüm komutların bir .BATdosyaya yazılabileceği başka bir yöntemi kullanarak .
  • Yalnızca Windows XP SP3'ün çıplak yüklemesinde, Internet bağlantısı olmadan kullanılabilecek araçları kullanma .
  • Komut dosyasını yerel olarak çalıştırmayı tercih ederim, ancak hedef sistemlere uzaktan erişimim de var. Ancak, varsayılan olmayan herhangi bir hizmetin (yani: Uzak Kayıt Defteri) sistemlerde etkin olduğunu varsayamayacağımı unutmayın.

Betiğin üzerinde çalışması gereken sistemler:

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

SETKomuta oldukça aşinayım , ancak genel olarak değişkenin üzerine eklemek yerine üzerine yazacağının da farkındayım . Bu kabul edilemez. SETBunun yerine değişkene eklenecek başka bir araç (veya bilmediğim bir seçenek ) var mı? Veya, komut dosyasına varolan değişkeni geçici olarak başka bir değişkene veya metin dosyasına kopyalamayı içeren bir çözüm bulmam gerekir mi?

Ayrıca, benim anladığıma SETolmaz kalıcı değişkeni değiştirebilir. Bahsettiğimi gördüm SETX, ancak bu Windows XP SP3'te yerleşik olarak görünmüyor (veya en azından üzerinde çalıştığım sistemde mevcut görünmüyor). Değişikliği kalıcı hale getirmenin başka bir yolu var mı?

Biraz etrafa baktım ve buradan Windows'ta ortam değişkenlerini ayarlama hakkında biraz şey öğrendim. Ancak, henüz ihtiyaçlarımı karşılayacak tam bir soru bulamadım . Eğer varsa, lütfen bana bildirin.


Setx XP ile birlikte gelmez. Bir veya daha fazla kaynak kitinde, ama hangisini hazırlıksız olarak unutuyorum. Komut satırında kalıcı ortam değişkeni değişiklikleri yapmak kesinlikle en kolay yoldur. Kayıt defterinde değişiklik yapabilirsiniz (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment), ancak komut satırından kayıt defteri değişiklikleri de kolay değildir. Ben olsaydım, bunu yapmak için bir VBScript yazardım.
EBGreen

@EBGreen REGKayıt defteri değişikliklerini yapmak için kullanmaya biraz aşinayım . Bunu cevap olarak, mevcut yolu nasıl koruyacağınıza dair önerilerle göndermek istiyorsanız, en azından ona oy vereceğim.
Iszi

1
Bence, EBGreen'in önerisine göre, bunu nasıl yapmam gerektiğini anladım. Şimdi keşke Explorer'ı yeniden başlatmadan veya yeniden yüklemeden kayıt defterini yenilemeyi (ve ortam değişkenlerine aktarmayı) zorlamanın bir yolu olsaydı?
Iszi

1
@EBGreen Evet, işte böyle görünüyor. Bu arada, sözdizimini bulmak için biraz zamanınız varsa, lütfen gerçek bir cevap gönderebilir misiniz? Bunun kendi kendine cevaplanan bir soruya dönüşmemesini tercih ederim.
Iszi

1
@lszi, kendi sorunuzu cevaplamalısınız. İyi bir soruya iyi bir cevap, kendiniz cevaplasanız bile değerlidir.
Myrddin Emrys

Yanıtlar:


4

Aşağıdaki yolunuza 'C: \ bin' ekler ve yeni yolu Kayıt Defteri'ne kaydeder:

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

Bunu sadece XP SP3'te test ettim, ancak daha yeni sürümde de çalışmalıdır.

Makine yeniden başlatılmadan önce oturum açan yeni bir kullanıcı yeni yolu alamayabilir.

Harry% SystemRoot% hakkındaki yorumunda haklı, eğer bunları saklamak istiyorsanız, önce yol için eski değeri kayıt defterinden çekmeniz gerekir:

@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.
)

2
Bunun, ortam değişken referanslarını genişleterek mevcut PATH girişlerinden bazılarını değiştireceğini unutmayın. Örneğin, standart% SystemRoot% \ system32 girdisi c: \ windows \ system32 ile değiştirilir. Bu özel örnek önemli değildir, çünkü SystemRoot sabittir, ancak birisi değişen bir ortam değişkenine referansla bir PATH ayarladıysa, onu kırarsınız. (Bunu bazı bilgisayarlarımda geçerli Sun JDK'daki bin dizinine işaret etmek için yapıyorum.)
Harry Johnston

Yolda köşeli ayraç varsa, örneğin Program Dosyalarına (x86) yapılan başvurularda yeni komut dosyası yazıldığı gibi çalışmaz.
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

2
Çıplak komutlar yararlı olsa da, sorularımızda / cevaplarımızda biraz daha çalışma bekliyoruz. Lütfen bunun OP sorusunu nasıl yanıtladığını açıklayınız.
ʜcʜιᴇ007
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.