CMD: Kopyalamadan yola ekle?


8

Bir kişi için CMD oturum kolayca yeni bir yol ayarlayabilirsiniz: SET PATH=%PATH%;"insert custom path here"

Bir toplu iş dosyasında bunu yapmak, özel yolun zaten dahil olup olmadığını dikkate almaz. Bunu kopyalamayı nasıl önleyebilirim (yani, PATH "dizesinde" zaten var olup olmadığını kontrol edin).

Uyarılar:

  1. İlgili: Kullanıcı tanımlı ortam değişkenlerini PATH sistem değişkenine Windows 7'de nasıl eklerim?
  2. İlgili: Komut satırıyla sistemin PATH değişkenine bir girişi kalıcı olarak nasıl ekleyebilirim?
  3. UNIX için de aynı soru: Henüz orada değilse $ PATH dizinini ekleyin
  4. Bazı "CMD" String opları açıklandı: http://ss64.com/nt/syntax-replace.html

Bu bağlamda, kopyalamanın zararsız olduğu belirtilmelidir. Çoğalmanın gerçekleşmesine izin vermekten kaçınmak, bundan kaçınmaya çalışmak ve yanlış bir pozitif riskini ortaya koymaktan daha mantıklı olacaktır.
Harry Johnston

Yanıtlar:


9

MaddHackers'a benzer şekilde daha kompakt cevaplar.
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np% Yeni yolunuz ise elbette bunun yerine değişmezleri kullanabilirsiniz. Bu ne yapar: echo %path%|find /i "%np%">nul Bir dizge için mevcut yolu arar, çıktıyı atar. || başarısızlıkta yürütmek anlamına gelir, yani: Eklenecek dize için arama yolu ve bulunmazsa, onu ekleyin.

Düzenleme: Genel olarak, yollar içerenlere, boşluk içerenlere bile teklif vermek gerekmez, ancak eğer onlardan alıntı yapmak istersen , bu sürüm çift alıntı yolu ile çalışacaktır:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

Düzenleme: değiştirildi findstr /i /c: için find /i gibi findstr bazı dizileri KubaOber tarafından yorumlarda belirtildiği gibi yanlış yorumlayabilir


Güzel, bunu yapmanın daha temiz bir yolu olduğunu biliyordum ... hala bash tercih ediyorum, ama bu sadece benim: D Yardımın için teşekkürler!
MaddHacker

Güzel, ama yoldaki boşluklarla mı çalışıyor? Özel yollarımla test ettim, "alıntılanan ve boşluk bırakan" yeniden eklendi. Biri sadece kote edilmiş fakat boşluk yok gibi görünüyor.
Horst Walter

1
@HorstWalter Evet, herhangi bir yolla çalışması gerekir (bazı boşlukları da kontrol ettim). Alıntı ile ne demek istiyorsun? Yolları tırnak içine, boşluk içerenleri bile kullanmanıza gerek yoktur. Eğer senin %np% tırnak işaretleri içerir - evet, yaramazlıklara neden olur.
wmz

2
@HorstWalter Düzenlememe bakın. Değişken kullanıyorsanız, yalnızca değişmezleri kullanıyorsanız bu sorun gibi echo %path%|findstr /i /c:"my path">nul || set path=%path%;"my path" ) iyi çalışması gerekir.
wmz

1
@wmz echo d\. | findstr /c:"d\." başarısız, ama echo d\. | find "d\." başarılı
Kuba Ober

4

Kirli olduğunu biliyorum ama bu işe yaramalı:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

nerede %checkstr% PATH'te denetlenecek dize %newpath% Geçerli PATH’a eklenecek yeni PATH

Bu yardımcı olur umarım ve daha kolay bir yol olduğundan eminim, ama bu şimdi için hile yapmalı.

DÜZENLE

Bu nedenle, UNIX araçlarını Windows'a eklemek istemiyorsanız, bu toplu sözdizimini deneyebilirsiniz:

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

Ug, daha güzel değil, ve pip'ed find komutunu if ifadesinde alt komut olarak çalışabiliyorsanız tek satır olarak yapılabilir ...


2

"Wmz" tarafından verilen cevabı temel alan komut dosyası:

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
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.