MS DOS 中的 CD\ 命令行

MS DOS 中的 CD\ 命令行

当我尝试CD\从我们的地图驱动器时,我得到:

错误:'cd\' 不被识别为内部或外部命令、可操作程序或批处理文件。

但有了空间(cd \),它就起作用了,

T:\bat>cd\

‘cd\’ 不被识别为内部或外部命令,也不是可运行的程序或批处理文件。

T:\bat>cd \

T:\>

谁能告诉我这是为什么?

答案1

CmdPi的回答重复了人们普遍接受的观点,即微软的命令解释器的工作方式与 UNIX shell 类似。这是 20 世纪 80 年代每个人都用脚投票的方式。但事实上他们没有这样做,现在仍然没有这样做。

命令名称可以并且可以分离命令尾部用相当多的字符来表示,而不仅仅是用空格。例如,可以使用等号或逗号。 path=C:\DOS是命令和尾部。 也是dir,dos。最著名的是,可以使用句号。因此,echo.在命令脚本中回显空白行的著名技巧。不太为人所知的是echo;echo+echo=echo(echo,echo[echo]echo\echo/都会做同样的事情(尽管对其中一些来说并非总是如此)。

实际上,有一个 DOS API 调用 ( int 21h,ax=6505h) 可用于获取所谓的“文件名终止字符”的完整字符列表。并且 DOS 命令解释器使用它来确定哪些字符终止命令名称并开始命令尾部。(非 DOS 操作系统的 Microsoft 命令解释器可能只是硬连线字符集。)

反斜杠就是其中的一个字符,在从 Microsoft 的commandMS-DOS 到 Microsoft 的cmdWindows NT 的命令解释器(包括 IBM/Microsoft 的cmdOS/2)中,都可以执行该命令cd\,结果是命令解释器将目录更改为\。命令尾是否包含终止符实际上因命令而异。对于 命令cd是这样的。对于dirpath命令则不是。(是的,Microsoft 命令解释器中的命令行解析器根据要运行的内置命令而表现不同。)

但这从未真正被记录下来。正如我所说:大多数人在 20 世纪 80 年代用脚投票接受了 UNIX shell 范例,即使诸如参数解析和引用之类的东西是一个巨大的阴谋虚构,根本不是由命令解释器实现的,而是由 DOS 的几种编程语言实现的运行时库实现的;并且您会发现大多数文献都自信地指出空格将名称与尾部分开,即使事实并非如此。 echo.通常被描述为一种怪癖和技巧,很少被描述为 Microsoft 的命令解释器已经使用大约三十年的整体语法的一个例子。

我建议遵循 20 世纪 80 年代的趋势,不要依赖这种鲜为人知的语法。使用空格。这是人们记录的内容。这是 IBM 和 Microsoft 等公司自己记录的内容。这是民间智慧所说的情况。这是 UNIX 爱好者所期望的。☺

我的命令解释器遵循了 IBM 文档中的语法图表和描述。但是,您会发现 FreeCOM 实现了这种记录不多的行为,JP Software 的命令解释器和commandOpenDOS 也是如此。JP Software 的文档建议使用空格,并将使用其他终止字符描述为“非法”。但是,它是官方文档中真正说明有替代方案的少数地方之一。

进一步阅读

答案2

CD 是命令,\ 是参数。

您必须用空格将两者分开。

相关内容