명령 줄에 확장자없이 이름을 쓸 때 파일이 열리는 이유는 무엇입니까?


41

Windows 10에는 truffle.js현재 폴더에 파일이 있습니다. 나는 trufflecmd 창에 쓰고 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 2016 년

답변:


75

기본적으로 %PATHEXT%설정되어 있기 때문 입니다 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. 포함 방법에 유의하십시오 .js.

즉, 이름을 입력하면 CMD는 현재 폴더에서 이러한 확장자를 가진 파일을 순서대로 추가 한 파일을 찾습니다. 그 후에 만에있는 내용을 고려할 것입니다 %PATH%. 이 동작은 변경할 수 없습니다. %PATHEXT%다른 환경 변수와 마찬가지로 수정할 수 있습니다 .

WHERE명령을 사용하여 열 경로를 확인할 수 있습니다 (예 where truffle:). CMD와 동일한 방식으로 % PATH % 및 % PATHEXT %를 자동으로 검색합니다.


3
명확히하기 위해, PATH를 살펴보기 전에 Windows가 입력을 가져오고 해당 파일 확장자를 입력에 추가하여 일치하는지 확인하십시오.
TankorSmash

9
또한 OP의 원래 논리에는 다음과 같은 것들이 있습니다. 이것들은 모두 실행 파일입니다 (어떤 의미에서 ...), 일부는 인간이 읽을 수 있습니다.
Adonalsium

2
@TankorSmash Windows CreateProcessShellExecute(Ex)API와 마찬가지로 PATHEXT를 보지 않습니다. 확장 검색은 기본 셸 (cmd.exe 및 powershell.exe) 내에서만 구현됩니다. 즉 말 CreateProcessShellExecute(Ex) 것이다 추가 .exe특히.

3
@ hBy2Py 공격자가 시스템에 파일을 생성하고 실행할 수있는 충분한 액세스 권한이있는 경우 파일 확장자 나 %PATHEXT%환경 변수 값에 관계없이 이미 문제가 있습니다 .
zakinster

2
@ JustinC.B. 사과와 오렌지. Notepad ++는 Microsoft 제품이 아니며 Windows와 함께 제공되지 않습니다. 따로 말하면, Sublime Text 또는 VSCode만큼 메모장을 대체하는 것입니다. 반면에 PowerShell은 자사 지원을 제공하며 레거시 명령 프롬프트에 대해 점점 더 기본적으로 제공되고 있으며, 지난 몇 년 동안 도입 된 많은 새로운 명령은 PowerShell 전용입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.