Adını uzantı olmadan komut satırına yazdığımda neden bir dosya açılıyor?


41

Windows 10'da, truffle.jsgeçerli klasörümde adlandırılmış bir dosya var . truffleCmd penceresine yazıyorum , truffleyolumun başka bir yerinde bulunan programı çağırmayı bekliyordum .

Bunun yerine, truffle.jsen sevdiğim IDE'de açılır ( .jsdosyalar bu IDE ile ilişkilendirilir). Bu davranış sadece çalıştırılabilir dosyalar için böyle olduğunu düşündüm .bat, .comve .exe. Bir .jsdosya için neden oluyor ?

Not: Daha sonra truffleyoluma hiçbir şekilde yüklenmediğimi öğrendim , ancak sorum devam ediyor: Windows neden çalıştırılamayan bir dosyada belirtmediğim uzantıyı tamamlıyor?

Yer mantarı kurup cmd'yi yeniden başlattıktan sonra bile, gerçek yer mantarını bir dosya içeren bir klasörde çalıştıramıyorum truffle.js.




Çünkü Windows, ilişkili bir uygulamaya sahip uzantıları olan herhangi bir dosyayı açacaktır. Sizi c:\path\application.exe c:\path\filename.extsadece yazmak yerine yazmaktan kurtarıyor filename.
ashleedawg

Yanıtlar:


75

Çünkü varsayılan %PATHEXT%olarak ayarlanmıştır .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. Nasıl içerdiğine dikkat edin .js.

Bu, bir ad yazarsanız, CMD bu uzantıları o sırayla geçerli klasörde bulunan dosyaları arayacaktır. Ancak ondan sonra ne olduğunu düşünecek %PATH%. Bu davranış değiştirilemez. %PATHEXT%Diğer ortam değişkenleri gibi değiştirebilirsiniz .

WHEREHangi yolun açılacağını (örn. where truffle) Kontrol etmek için komutu kullanabilirsiniz; bu, hem% PATH% hem de% PATHEXT% 'i CMD'nin yaptığı gibi otomatik olarak arayacaktır.


3
Açıklığa kavuşturmak için, pencerelerin bir girdi alacağını, PATH'ye bakmadan önce eşleşip eşleşmediğini görmek için bu dosya uzantılarını girişe eklemeyi kastediyorsunuz.
TankorSmash

9
Ayrıca OP'nin orijinal mantığının beklediğine dikkat edin - bunların hepsi çalıştırılabilirdir (bir anlamda ...), bazıları sadece okunabilir olur.
Adonalsium

2
@TankorSmash Windows, CreateProcessve sanırım ShellExecute(Ex)API'lar da PATHEXT'e bakmıyor. Uzantı araması yalnızca varsayılan kabuklarda (cmd.exe ve powershell.exe) uygulanır. Yani, CreateProcessve ShellExecute(Ex) olacaktır ekleme .exeözellikle.
Bob

3
@ hBy2Py, eğer bir saldırgan sisteminize bir dosya yerleştirmek ve yürütmek için yeterli erişime sahipse, dosya uzantısı veya %PATHEXT%ortam değişkeninin değeri ne olursa olsun çoktan mahrum kalırsınız .
zakinster

2
@ JustinC.B. Elmalar ve Portakallar. Notepad ++ bir Microsoft ürünü değildir (ve Windows ile birlikte verilmez vb.). Bir kenara koyarsanız, Notepad yerine Sublime Text veya hatta VSCode gibi bir şey (ya da çok az) gelir. PowerShell, diğer taraftan, birinci taraf desteğine sahiptir ve eski Komut İstemi'nde varsayılan olarak artan (varsayılan) haline gelmektedir ve son birkaç yıl içinde sunulan yeni komutların çoğu yalnızca PowerShell'dir.
Bob
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.