Tek bir girişle PATH değişkenine bir dizin ve tüm alt dizinler ekleyin


19

Ana klasörümde komut satırı yazılımı (CMD_Software) yerleştirdiğim bir dizin var. Karışıklığı önlemek için her yazılım parçasını CMD_Software içinde kendi dizinine koydum.

PATH değişkenimde CMD_Software ve komut satırından içerdiği tüm dizinlere erişime izin verecek tek bir giriş yapmak istiyorum.

Denedim C:\Users\myuser\CMD_Software\*ama hiçbir şey yapmadı. Fikirlerim bitti.

Lütfen terminalde yeni bir yol ayarlamaya çalışmıyorum, Sistem Özellikleri "Gelişmiş" sekmesinde bulunan "Ortam Değişkenleri" yeni bir yol ayarlamaya çalışıyorum unutmayın.


`C: \ Users \ myuser \ CMD_Software *` gibi bir şey denediniz mi?
terdon

4
Bunun mümkün olduğunu düşünmüyorum.
Harry Johnston

Yanıtlar:


16

PATH değişkeni joker karakterleri veya özyinelemeyi desteklemez. Bu tasarım gereğidir.

Ara sıra kullandığım iki olası geçici çözüm var:

  • Basit toplu iş dosyaları içeren bir dizin oluşturun ve bu dizini PATH'e ekleyin. Her toplu iş dosyası istediğiniz programı başlatabilir, örneğin:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    İlk satır bir açıklamadır, ikincisi @komutun çalıştırılmasını göstermekten kaçınır ve %*komut satırı bağımsız değişkenlerini EXE'ye iletmek için kullanılır.

  • CMD.EXE için diğer adlar ekleyin:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    Bu aslında CMD_Softwarekomut isteminde eşittir işaretinden sonraki her şeye çevirir . Bunun $*yerine sağlanan bağımsız değişkenler gelir.

Tüm diğer adları tek bir dosyada gruplayabileceğiniz için ikinci yaklaşımı tercih ediyorum (DOSKEY /? İçindeki "/ MACROFILE" anahtarına bakın) ve komut yorumlayıcısı bir kayıt defteri ayarını kullanmaya başladığında otomatik olarak çalıştırılmasını sağlayın (bkz. "AutoRun" anahtarı CMD /?).

İkinci yöntemin bir dezavantajı, takma adların yalnızca komut satırının başında çalışmasıdır. Komutları zincirlemek istiyorsanız bu bir sorun olabilir. Örneğin CLS & CMD_Software, diğer adı parantez kullanarak ayrı bir satıra koymadıkça çalışmaz:

CLS & (
CMD_Software
)

Bu bir sorun haline geldiğinde, toplu iş dosyası yaklaşımına geri dönüyorum.


Teşekkürler! İlk yöntem benim için gerçekten iyi çalışıyor, çünkü verilerimi bilgisayarlar arasında aktardığımda kayıt defteri ile uğraşmak zorunda değilim. Ayrıca oldukça düzenli ve kullanışlıdır, çünkü söz konusu yardımcı programı aldığınızda yalnızca bir bat dosyası oluşturmak için biraz daha fazla zaman harcarsınız.
cyqsimon

Maalesef önceki beyanımı hızlı bir şekilde düzeltmek zorundayım. İlk yöntemi uyguladıktan sonra yürütme yoluyla rasgele yarı yolda çıkan komut dosyalarında garip sorunlarla karşılaştım. Özellikle, Windows için wget indirmeyi bitirdikten sonra komut dosyamı öldürmekten hoşlanıyor gibi görünüyor. Son iki saatimi senaryomda acılı bir şekilde sorun giderme harcadım, ama sonunda tüm exes'leri tek bir kök dizine atmaya çalıştım ve problemler kayboldu. Bu nedenle, herkes bu yönteme girmeden önce dikkatle tavsiye ediyorum.
cyqsimon

4

Sorunu çözmek için kullandığım şey bu. Aşağıdaki komut dosyasını kopyalayın FIXPATH.BATve PATHortam değişkenine eklediğiniz klasöre kaydedin . Örneğin:

C: \ Users \ myuser \ CMD_Software \

Şimdi bir alt klasörde bulunan bir programı çalıştırmanız gerektiğinde, diyelim ki ...

C: \ Users \ myuser \ CMD_Software \ unixutils \ grep.exe
veya
C: \ Users \ myuser \ CMD_Software \ ImageTools \ exiftool.exe

fixpathÖnce çalıştırın, ardından şu şekilde komutu girin (örn. grepVeya exiftool):

Microsoft Windows [Sürüm 6.3.9600]
(c) 2013 Microsoft Corporation. Tüm hakları Saklıdır.

C: \ Users \ myuser> fixpath
C: \ Users \ myuser> ExifTool


FIXPATH.BAT

setlocal EnableDelayedExpansion
cd / D% ~ dp0

/ R %% d için (.)
    "dirs =! dirs!; %% d" olarak ayarlayın
)

yol =% path%! dirs!
(endlocal
    "ret =% PATH%" olarak ayarla
)
cmd / K "başlık [#] Yol Sabit [#] && yol% ret%"
çıkış / B

@ VonC'nin cevabı için teşekkürler


1

... \ CMD_Software (veya aslında herhangi bir yere) altına bir "program bağlantıları \" alt dizini koyun ve erişmek istediğiniz her yürütülebilir dosyaya sembolik bağlantılarla veya sabit bağlantılarla doldurun. Sonra ... \ program bağlantıları için PATH'de tek bir giriş yeterli olacaktır.


1
Buradaki ana sorun, yürütülebilir dosyanın exe ile aynı dizinde bulunmasına bağlı olduğu herhangi bir kitaplık varsa, bunların kullanılmayacağıdır. Ya da en azından bu benim girişimimde olan şey bu.
zero298

Büyük açıklama, @ zero298. Herkes% 100 emin ise, istiyorum ve bu zilini memnun etmek aslında doğru onaylayabilir rağmen. (Bu yöntem aksi takdirde tüm mutlak en temiz olduğunu da.)
Henrik

-1

Bu fikirden çok vazgeçmezseniz, komut satırı araçlarınızı Windows \ System32 dizinine kopyalayabilirsiniz. Daha sonra bunları ping veya ipconfig gibi herhangi bir dizinden çalıştırabilirsiniz.

Diğer anlamları: düzenlemek
Sonra biraz tinkering etrafında, bu IS mümkün. Dizinlerinizi sınırlamak için noktalı virgül kullanmanız yeterlidir. Diyelim ki "klasör1" ve "klasör2" de bir programınız var. Yolunuzu şöyle yazarsınız:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

Ardından her iki dizindeki bir programı doğrudan komut satırından çağırabilirsiniz. AFAIK bunu tek bir hatla yapmanın başka bir yolu yok.

Destekleyici bilgi: http://en.wikipedia.org/wiki/PATH_(variable)


1
Bu pek mantıklı değil. 1. Bu, PATH değişkeninin önceki içeriğini siler . 2. PATH değişkeni sadece klasörü içerecektir, alt dizinlerini içermeyecektir (istenen sonuç). 3. çağırma program.batolarak %PATH%\program.bataz ya da çok YOL için tasarlanmış değildir, bunun tersi.
Dennis
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.