명령줄에서 EXE 확장이 필수가 되는 원인은 무엇이며 현재 셸에서 이를 어떻게 해결할 수 있습니까?

명령줄에서 EXE 확장이 필수가 되는 원인은 무엇이며 현재 셸에서 이를 어떻게 해결할 수 있습니까?

명령줄에서 EXE 확장이 필수가 되는 원인은 무엇이며 현재 셸에서 이를 어떻게 해결할 수 있습니까?

나는 길이 멀었다. > 2048자이고 해당 경로에 추가된 nodejs 프로그램을 설치했습니다. 그리고 상황은 좀 이상해졌습니다. 어떤 사람들은 경로가 2048자보다 큰 경우 어느 시점에 나타나는 문제가 있었습니다. 내 경로의 대부분이 제거되었습니다. (아직 내 경로에 오래된 cmd 셸이 있으므로 큰 문제는 아니므로 이전 경로를 파일에 저장했습니다.) 그리고 windir 환경 변수는 레지스트리에 있습니다(아무 것도 설정하지 않은 것 같습니다). 그리고 환경 변수 창도 열 수 없었습니다(이는 경로가 2048자보다 크고 windir 변수가 손실된 경우 사람들이 얻을 수 있는 증상입니다). 그래서 setx를 사용하여 생성 windir=c:\windows하고 환경 변수 창을 열고 PATH를 원래대로 수정했습니다. 이제 내가 여는 cmd 프롬프트 창은 괜찮습니다.

하지만 문제를 해결하기 전의 오래된 cmd 프롬프트 창이 여전히 남아 있고 그 창에서 경로가 단축되었다는 점과 windir 변수 세트가 없다는 점을 이해하지만 설명할 수 없는 기괴한 결과가 여전히 표시됩니다. 그리고 저는 해당 cmd 창 내에서 문제를 해결할 수 있기를 바랍니다.

실행하려면 실행 파일 뒤에 EXE를 넣어야 하는 것 같습니다.

C:\crp>path
PATH=C:\Ruby21\bin;C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\;C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\;C:\Program Files (x86)\Nmap;C:\Program Files (x86)\smartmontools\bin;C:\ProgramData\chocolatey\bin;C:\Users\user\AppData
\Roaming\npm

C:\crp>cd \windows\system32

C:\Windows\System32>ping
'ping' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>ping.exe

Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
......


C:\Windows\System32>set path=

C:\Windows\System32>ping.exe

Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
.....

C:\Windows\System32>ping
'ping' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>

그리고

C:\Windows\System32>ping
'ping' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>set windir=c:\windows

C:\Windows\System32>echo %windir%
c:\windows

C:\Windows\System32>ping
'ping' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>ping.exe

Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]

재미있는 점은 향후 cmd 프롬프트에서 이를 해결한 방법이 windir을 영구적으로 설정하는 것, 즉 setx를 사용하는 것이라고 생각한다는 것입니다(그런 다음 환경 변수 창으로 이동하여 경로를 수정했습니다).

버스트된 cmd 세션 내에서 경로를 수정할 수 있고 해당 cmd 세션에서 windir을 수정할 수도 있습니다. 어느 쪽도 도움이 되지 않는다는 것을 알고 있지만 파일 이름 끝에 EXE를 넣는 것이 필수입니다. 그래서 원인을 알 수 없습니다. 또는 특정 cmd 세션에 대해 문제를 해결하는 방법도 없습니다.

새로운 cmd 창은 괜찮습니다. 하지만 무슨 일이 일어나고 있는지 이해하기 위해 중단된 cmd 세션 내에서 문제를 해결할 수 있기를 원합니다. 그리고 그렇지 않다면 왜 그 안에서 고칠 수 없는지 알고 싶습니다.

추가됨

Dmitry의 게시물과 관련됨

C:\Windows\System32>echo %PATHEXT%
%PATHEXT%;.RB;.RBW

실제로 .EXE가 나열되지 않고 리터럴 %PATHEXT%가 거기에 나열되어 있다는 것이 약간 이상합니다. 거의 무한히 재귀적인 것 같습니다(DOS가 거기에서 재귀/재귀를 처리한다면 그렇지 않을 것입니다)!

답변1

PATHEXT환경변수는 확인하셨나요 ? 실행 가능한 것으로 간주되는 확장을 나열합니다. 내 것은 이렇습니다.

PATHEXT=.COM;.EXE;.BAT;.CMD;.LNK;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.AU3

그런데, 멋진 환경 편집기가 있습니다.신속한 환경 편집기

관련 정보