CD \ Командная строка в MS DOS

0

Когда я пытаюсь CD\с нашей карты Drive, я получаю:

ошибка: 'cd \' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Но с пробелом ( cd \) это работает,

T:\bat>cd\

'cd \' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

T:\bat>cd \

T:\>

Кто-нибудь может сказать мне, почему это?

user311952
источник
1
Работает нормально без места на подключенном сетевом ресурсе в Windows 7. В чем именно проблема?
harrymc
2
cmd.exeэто не то же самое, что MS-DOS
Кевин Панко

Ответы:

2

CmdPiОтвет повторяет полученную мудрость о том, что командные интерпретаторы Microsoft работают как оболочки UNIX. Именно так каждый голосовал ногами в 1980-х годах. Но на самом деле они этого не сделали и до сих пор не делают.

Имена команд могут и могут быть отделены от хвостов команд значительным количеством символов, а не только пробелами. Можно использовать символ равенства, например, или запятую. path=C:\DOSэто команда и хвост. Так же и есть dir,dos. Самый известный, можно использовать полную остановку. Отсюда и известный echo.трюк для вывода пустой строки в командном скрипте. Что менее хорошо известно, что echo;, echo+, echo=, echo(, echo,, echo[, echo], echo\, и echo/все будет делать то же самое (хотя и не всегда для некоторых из них).

Фактически, есть вызов API DOS ( int 21h,ax=6505h), который можно использовать для получения полного списка символов, которые являются так называемыми «символами завершения имени файла». И интерпретаторы команд DOS используют его, чтобы определить, какие символы заканчивают имя команды и начинают хвост команды. (Интерпретаторы команд Microsoft для не-DOS операционных систем, вероятно, просто передают набор символов.)

Обратная косая черта является одним из этих символов, и в интерпретаторах команд от Microsoft commandв MS-DOS до Microsoft cmdв Windows NT (включая IBM / Microsoft cmdдля OS / 2 по пути) можно выполнить, cd\и в результате интерпретатор команд изменит каталог к \. То, включен ли символ завершения в хвост команды, на самом деле зависит от команды. С cdкомандой это так. С dirи pathкоманды это не так . (Да, анализатор командной строки в интерпретаторах команд Microsoft ведет себя по-разному в зависимости от того, какая встроенная команда должна быть запущена.)

Это никогда не было задокументировано, хотя. Как я уже сказал: большинство людей в 1980-х годах проголосовали ногами за принятие парадигмы оболочки UNIX, хотя такие вещи, как разбор аргументов и цитирование, являются обширной заговорщической выдумкой, реализованной вовсе не интерпретатором команд, а библиотеками времени выполнения нескольких языков программирования. реализации для DOS; и вы обнаружите, что большая часть литературы уверенно заявляет, что пробел отделяет имя от хвоста, хотя на самом деле это не так. echo.Обычно описывается причуды и хитрости, и очень редко описывается как просто один случай общего синтаксиса, который командные интерпретаторы Microsoft использовали в течение примерно трех десятилетий.

Я рекомендую придерживаться здесь тенденции 1980-х годов и не полагаться на этот малоизвестный синтаксис. Используйте пробелы. Это то, что люди документируют. Это то, что сами IBM и Microsoft документируют. Это то, что утверждает народная мудрость. Это то, чего ожидают руководители UNIX. ☺

Мой командный интерпретатор шел с синтаксическими диаграммами и описаниями, которые есть в IBM doco. Однако вы обнаружите, что FreeCOM реализует это мало документированное поведение, как и интерпретаторы команд JP Software и commandOpenDOS. Документация JP Software рекомендует использовать пробел и описывает использование других символов завершения как «незаконных». Это, однако, одно из немногих мест, в которых фактически говорится в официальной документации, что есть альтернатива.

дальнейшее чтение

JdeBP
источник
2
Хороший ответ, но не на тот вопрос. Это не имеет ничего общего с этим вопросом.
Harrymc
1

CD - это команда \ параметр.

Вы должны разделить оба пробела.

CMPi
источник
2
Это не совсем верно. По крайней мере, в Windows 7 и выше вам не нужно их разделять. В какой-то момент вы это сделали, но я не могу вспомнить, в какой версии Windows реализовано это изменение.
EBGreen
он работает на другом диске Microsoft Windows XP [Версия 6.1.7601] (C) Copyright 1985-2001 Microsoft Corp. U: \ bat> cd \ U: \>
user311952
Сказав это, не особенно обременительно просто использовать пространство все время для поддержания обратной совместимости.
EBGreen
также протестирован в Win XP, 7 и 8
user311952
Мое единственное предположение (и это чистое предположение) состоит в том, что это связано с отображением диска. Командная строка никогда не любила пути unc вообще, и я подозреваю, что, даже если диск сопоставлен, он все равно обрабатывает его как другую систему дисков (с ограниченным объемом чтения).
EBGreen