Что может привести к тому, что расширение EXE станет обязательным в командной строке, и как это можно разрешить в текущей оболочке?
У меня был длинный путь. > 2048 символов, и я установил программу nodejs, которая добавила его к этому пути. И затем все пошло немного странно. У меня была проблема, с которой некоторые люди, похоже, сталкиваются в какой-то момент, когда их путь > 2048 символов. Большая часть моего пути была удалена. (У меня все еще есть несколько старых оболочек cmd с моим путем, так что это не большая проблема, поэтому я сохранил свой старый путь в файле) И переменная среды windir попала (я думаю, установлена в ноль) в реестр. И я даже не мог открыть окно переменных среды (это симптом, который люди могут получить, когда их путь > 2048 символов, и они теряют свою переменную windir). Поэтому я использовал setx для создания windir=c:\windows
и я открыл окно переменных среды и исправил свой PATH на тот, какой он был. И теперь окна приглашений cmd, которые я открываю, работают нормально.
Но у меня все еще есть некоторые старые окна командной строки, которые были до того, как я исправил это, и я понимаю, что путь в них сокращен, и я понимаю, что переменная windir не установлена, но я все еще вижу в них странный результат, который не могу объяснить. И я хотел бы иметь возможность исправить это из этих окон командной строки.
Похоже, мне нужно поместить 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, я даже могу исправить windir в этом сеансе cmd, я знаю, что ни то, ни другое не должно помочь, но это делает обязательным добавление EXE в конец имен файлов. Так что я не вижу причины... или как исправить это для конкретного сеанса cmd.
Новые окна cmd хороши.. Но чтобы понять, что происходит, я хочу иметь возможность исправить это из поврежденного сеанса cmd. А если нет, то я хотел бы знать, почему это не может быть исправлено внутри него.
Добавлен
Относится к посту Дмитрия
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
Кстати, есть хороший редактор окружения:Редактор быстрой среды