Когда я пытаюсь CD\
с нашей карты Drive, я получаю:
ошибка: 'cd \' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.
Но с пробелом ( cd \
) это работает,
T:\bat>cd\
'cd \' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.
T:\bat>cd \
T:\>
Кто-нибудь может сказать мне, почему это?
cmd.exe
это не то же самое, что MS-DOSОтветы:
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 до Microsoftcmd
в Windows NT (включая IBM / Microsoftcmd
для OS / 2 по пути) можно выполнить,cd\
и в результате интерпретатор команд изменит каталог к\
. То, включен ли символ завершения в хвост команды, на самом деле зависит от команды. Сcd
командой это так. Сdir
иpath
команды это не так . (Да, анализатор командной строки в интерпретаторах команд Microsoft ведет себя по-разному в зависимости от того, какая встроенная команда должна быть запущена.)Это никогда не было задокументировано, хотя. Как я уже сказал: большинство людей в 1980-х годах проголосовали ногами за принятие парадигмы оболочки UNIX, хотя такие вещи, как разбор аргументов и цитирование, являются обширной заговорщической выдумкой, реализованной вовсе не интерпретатором команд, а библиотеками времени выполнения нескольких языков программирования. реализации для DOS; и вы обнаружите, что большая часть литературы уверенно заявляет, что пробел отделяет имя от хвоста, хотя на самом деле это не так.
echo.
Обычно описывается причуды и хитрости, и очень редко описывается как просто один случай общего синтаксиса, который командные интерпретаторы Microsoft использовали в течение примерно трех десятилетий.Я рекомендую придерживаться здесь тенденции 1980-х годов и не полагаться на этот малоизвестный синтаксис. Используйте пробелы. Это то, что люди документируют. Это то, что сами IBM и Microsoft документируют. Это то, что утверждает народная мудрость. Это то, чего ожидают руководители UNIX. ☺
Мой командный интерпретатор шел с синтаксическими диаграммами и описаниями, которые есть в IBM doco. Однако вы обнаружите, что FreeCOM реализует это мало документированное поведение, как и интерпретаторы команд JP Software и
command
OpenDOS. Документация JP Software рекомендует использовать пробел и описывает использование других символов завершения как «незаконных». Это, однако, одно из немногих мест, в которых фактически говорится в официальной документации, что есть альтернатива.дальнейшее чтение
источник
CD - это команда \ параметр.
Вы должны разделить оба пробела.
источник