Mengapa file dibuka ketika saya menulis namanya, tanpa ekstensi, di baris perintah?

41

Pada Windows 10, saya memiliki file yang dipanggil truffle.jsdi folder saya saat ini. Saya menulis truffledi jendela cmd, berharap untuk menjalankan truffleprogram yang berada di tempat lain di jalan saya.

Sebaliknya, truffle.jsdibuka di IDE favorit saya ( .jsfile terkait dengan IDE itu). Saya pikir perilaku ini hanya seperti ini untuk file yang dapat dieksekusi .bat,, .comdan .exe. Mengapa itu terjadi pada .jsfile?

Catatan: Saya kemudian menemukan bahwa saya trufflesama sekali tidak menginstal di jalur saya, tetapi pertanyaan saya tetap: mengapa Windows menyelesaikan ekstensi yang saya tidak tentukan pada file yang tidak dapat dieksekusi?

Bahkan setelah menginstal truffle dan memulai ulang cmd, saya tidak bisa menjalankan truffle yang sebenarnya dalam folder yang berisi file truffle.js.

ripper234
sumber
Karena Windows akan membuka file apa pun dengan ekstensi yang memiliki aplikasi terkait. Ini menyelamatkan Anda dari keharusan mengetik c:\path\application.exe c:\path\filename.extbukan hanya filename.
ashleedawg

Jawaban:

75

Karena %PATHEXT%diatur .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCsecara default. Perhatikan bagaimana isinya .js.

Itu berarti jika Anda mengetik nama, CMD akan mencari file dengan ekstensi ini ditambahkan, dalam urutan itu, di folder saat ini. Hanya setelah itu ia akan mempertimbangkan apa yang ada di dalamnya %PATH%. Perilaku ini tidak dapat diubah. Anda dapat memodifikasi %PATHEXT%, seperti variabel lingkungan lainnya.

Anda dapat menggunakan WHEREperintah untuk memeriksa jalur mana yang akan dibuka (mis. where truffle), Yang secara otomatis akan mencari% PATH% dan% PATHEXT% seperti CMD.

Daniel B
sumber
3
Untuk memperjelas, maksud Anda windows akan mengambil input, tambahkan ekstensi file ke input untuk melihat apakah cocok, sebelum melihat di PATH.
TankorSmash
9
Juga perhatikan bahwa logika asli OP berlaku - ini semua dapat dieksekusi (dalam beberapa hal kata ...), beberapa di antaranya kebetulan juga dapat dibaca oleh manusia.
Adonalsium
2
@TankorSmash Windows, seperti pada CreateProcessdan saya pikir juga ShellExecute(Ex)API, tidak melihat PATHEXT. Pencarian ekstensi hanya diimplementasikan dalam shell default (cmd.exe dan powershell.exe). Yang mengatakan, CreateProcessdan ShellExecute(Ex) akan ditambahkan .exesecara khusus.
Bob
3
@ hBy2Py jika penyerang memiliki cukup akses untuk menanam file di sistem Anda dan menjalankannya, Anda sudah kacau, tidak peduli ekstensi file atau nilai %PATHEXT%variabel lingkungan.
zakinster
2
@ JustinC.B. Apel dan jeruk. Notepad ++ bukan produk Microsoft (dan tidak dibundel dengan Windows, dll.). Selain itu, ini adalah pengganti Notepad seperti Sublime Text atau bahkan VSCode. PowerShell, di sisi lain, memiliki dukungan pihak pertama dan semakin menjadi default (dibundel) di atas Command Prompt yang lama, dan banyak dari perintah baru yang diperkenalkan selama beberapa tahun terakhir hanya PowerShell.
Bob