Вы не используете MS-DOS; он даже не допускает расширения файлов длиннее 3 символов. Вы используете командную строку Windows - в частности, оболочку cmd.exe
.
Но Windows действительно старается поддерживать совместимость с программами той эпохи. Таким образом, вплоть до Windows 8 (или чего-то подобного) все файлы с более длинными расширениями имеют псевдоним, у которого расширение урезано, вместе с самим именем.
Если вы запустите dir /x
, вы, вероятно, увидите, что каждому файлу присвоено "короткое имя", которое ограничено 8+3 символами, как в MS-DOS и 16-битной Windows.
Эти имена присутствуют на тот случай, если пользователь захочет, скажем, обновить до Windows 95 и по-прежнему получать доступ к своим файлам через программы, изначально написанные для Windows 3.1 - поэтому запуск 16-разрядной программы не приведет к сбою, а просто покажет C:\PROGRA~1
и C:\MYDOCU~1\CALENDAR.TXT
вместо C:\Program Files
и C:\My Documents\Calendar.txt
.
(И да, некоторые люди действительно использовали старое 16-битное программное обеспечение даже в дни Windows XP/Vista ... Однако я уверен, что Windows 8 по умолчанию отключает "короткие имена". Возможно, поэтому @EBGreen не видит ту же "проблему" ...)
Еще одна вещь, которую стоит учесть, это то, что старая оболочка Windows, cmd.exe
, вырастила немало причуд и исправлений совместимости сама по себе. Например, из-за того, как MS-DOS совпал с именами файлов, dir .txt
означал то же самое, что и dir *.txt
, хотя это и не было преднамеренным. Но люди привыкли к более короткому синтаксису, и хотя сама операционная система Windows больше не рассматривает .txt
как подстановочный знак, cmd.exe
прежнему принимает этот синтаксис. (Команда dir
сама по себе не является программой, а встроена в оболочку.)
(Точно так же в связанной статье описывается еще одна странная особенность - имена файлов Windows могут вообще не иметь расширения, но люди действительно привыкли печатать *.*
, Поэтому это означает то же самое, что и *
а одиночная точка игнорируется.)