เหตุใดไฟล์จึงเปิดขึ้นเมื่อฉันเขียนชื่อโดยไม่มีนามสกุลในบรรทัดคำสั่ง


41

ใน Windows 10 ฉันมีไฟล์ชื่อtruffle.jsในโฟลเดอร์ปัจจุบันของฉัน ฉันเขียนtruffleในหน้าต่าง cmd โดยคาดว่าจะเรียกใช้truffleโปรแกรมซึ่งอยู่ที่อื่นบนเส้นทางของฉัน

แต่truffle.jsจะเปิดใน IDE รายการโปรดของฉัน ( .jsไฟล์จะเชื่อมโยงกับ IDE นั้น) ผมคิดว่าพฤติกรรมนี้เป็นเพียงเช่นนี้สำหรับไฟล์ปฏิบัติการ.bat, และ.com .exeเหตุใดจึงเกิดขึ้นกับ.jsไฟล์

หมายเหตุ: ในภายหลังฉันพบว่าฉันไม่ได้truffleติดตั้งอะไรเลยบนเส้นทางของฉัน แต่คำถามของฉันยังคงอยู่: เหตุใด Windows จึงขยายส่วนขยายที่ฉันไม่ได้ระบุไว้ในไฟล์ที่ไม่สามารถเรียกใช้งานได้

แม้หลังจากติดตั้งทรัฟเฟิลและรีสตาร์ท cmd แล้วฉันก็ไม่สามารถทรัฟเฟิลตัวจริงให้ทำงานในโฟลเดอร์ที่มีไฟล์truffle.jsได้




เนื่องจาก Windows จะเปิดไฟล์ใด ๆ ที่มีส่วนขยายที่มีแอปพลิเคชันที่เกี่ยวข้อง มันช่วยให้คุณประหยัดจากการมีประเภทมากกว่าแค่c:\path\application.exe c:\path\filename.ext filename
ashleedawg

คำตอบ:


75

เนื่องจาก%PATHEXT%ตั้งค่าเป็นค่า.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCเริ่มต้น .jsหมายเหตุวิธีการที่จะมี

ซึ่งหมายความว่าหากคุณพิมพ์ชื่อ CMD จะค้นหาไฟล์ที่มีส่วนขยายเหล่านี้ต่อท้ายตามลำดับในโฟลเดอร์ปัจจุบัน %PATH%เท่านั้นหลังจากนั้นก็จะพิจารณาสิ่งที่อยู่ใน พฤติกรรมนี้ไม่สามารถเปลี่ยนแปลงได้ คุณสามารถแก้ไขได้%PATHEXT%เช่นเดียวกับตัวแปรสภาพแวดล้อมอื่น ๆ

คุณสามารถใช้WHEREคำสั่งเพื่อตรวจสอบว่าจะเปิดพา ธ ใด (เช่นwhere truffle) ซึ่งจะค้นหาทั้ง% PATH% และ% PATHEXT% แบบเดียวกับที่ CMD ใช้


3
ในการชี้แจงคุณหมายถึงว่า windows จะรับอินพุตเพิ่มนามสกุลไฟล์เหล่านั้นไปยังอินพุตเพื่อดูว่าตรงกันหรือไม่ก่อนที่จะดูใน PATH
TankorSmash

9
นอกจากนี้โปรดทราบว่าตรรกะดั้งเดิมของ OP เก็บไว้ - สิ่งเหล่านี้เป็นสิ่งที่ปฏิบัติการได้ (ในความหมายของคำบางคำ ... ) บางส่วนของพวกมันก็เกิดขึ้นกับมนุษย์
Adonalsium

2
@TankorSmash Windows เช่นเดียวกับในCreateProcessและฉันคิดว่าShellExecute(Ex)APIs ไม่ได้ดู PATHEXT การค้นหาส่วนขยายจะดำเนินการภายในเชลล์เริ่มต้นเท่านั้น (cmd.exe และ powershell.exe) ที่กล่าวมาCreateProcessและShellExecute(Ex) จะผนวก.exeเฉพาะ
Bob

3
@ hBy2Py หากผู้โจมตีมีสิทธิ์เข้าถึงไฟล์ในระบบของคุณและดำเนินการได้คุณจะถูกเมาแล้วไม่ว่าส่วนขยายไฟล์หรือค่าของ%PATHEXT%ตัวแปรสภาพแวดล้อมจะเป็นอย่างไร
zakinster

2
@ JustinC.B แอปเปิ้ลและส้ม Notepad ++ ไม่ใช่ผลิตภัณฑ์ของ Microsoft (และไม่ได้รวมอยู่ใน Windows และอื่น ๆ ) การตั้งชื่อมันเป็นสิ่งทดแทน (หรือน้อย) แทน Notepad เป็น Sublime Text หรือแม้แต่ VSCode ในทางกลับกัน PowerShell ได้รับการสนับสนุนจากบุคคลที่หนึ่งและกำลังกลายเป็นค่าเริ่มต้น (รวม) มากกว่าพร้อมรับคำสั่งดั้งเดิมและคำสั่งใหม่ที่แนะนำในช่วงไม่กี่ปีที่ผ่านมาเป็น PowerShell เท่านั้น
Bob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.