什么原因导致 EXE 扩展在命令行上是强制性的,以及如何在当前 shell 中解析它?
我的路径很长。> 2048 个字符,我安装了一个程序,nodejs 将它添加到该路径中。然后事情变得有点奇怪。我遇到了一个问题,有些人似乎在路径 > 2048 个字符时会遇到这个问题。我的大部分路径都被删除了。(我的路径中仍有一些旧的 cmd shell,所以这不是什么大问题,所以我将旧路径保存在一个文件中)并且 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
顺便说一句,有一个不错的环境编辑器:快速环境编辑器