我正在教我妹妹命令行界面,我教她什么是内部命令和外部命令(也称为常驻和临时命令)她问我的是这些中的哪一个Windows XP 中的命令以及哪一个Windows Vista、Windows 7 命令哪些是内部的,哪些是外部的?
那么,有什么方法可以知道吗?
答案1
你这样对你姐姐不利。
“常驻”命令和“临时”命令之间的区别源自 MS-DOS 和 CP/M 中的非虚拟化内存管理架构。在按需分页虚拟内存操作系统(如 Windows NT 6.1)中,这种区别毫无意义。系统不会让命令处理器中内置的内容保持常驻,命令处理器调用的程序也不一定是临时的。内存的管理方式完全不同。
你引用“DOS 命令”列表也对你姐姐不利。你的操作系统不是 DOS,而且在其整个历史上从来都不是 DOS。DOS 系列操作系统的情况不一定适用于你的操作系统及其命令解释器。
您正在摸索的术语是“内置命令”,其程序代码内置于命令解释器可执行文件中并在命令解释器进程本身中运行,而“外部命令”的程序代码位于单独的可执行程序映像中并在单独的进程中运行。
对于某些命令解释器来说,这非常容易;但必须由命令解释器来执行此操作。
JP Software 的替代命令解释器中信资本管理公司有一个内置命令——? 命令— 显示所有当前启用的内置命令。获取内置命令列表非常简单,只需运行以下命令:
?
我的命令解释器有同样的东西。ReactOS 的命令解释器也有cmd
。(在我们所有的命令解释器中,它都是相同的命令——?
事实上。)所有其他可能出现这种情况的命令解释器都会有这个命令或具有类似功能的命令。(POSIX 系统的 Shell 具有各种内置命令,名为type
、whence
或which
,例如)获取内置命令列表有通过命令解释器内置的命令来完成,因为只有能够访问命令解释器代码内部的命令才知道在哪里找到命令解释器程序包含和维护的内置命令列表。
可以使用以下方式写入外部命令它自己的内置命令列表。大约二十年前,我自己写过一个这样的程序。它知道command
、、和中内置的所有命令,因为我构建了自己的表格来记录谁拥有哪些内置命令并将其放入程序中。但是它无法判断是否已使用 禁用了任何内置命令,cmd
并且它始终受制于那些命令解释器的作者,他们在程序中添加新的内置命令或只是不记录某些命令。并且它无法知道它是从哪个命令解释器(如果有)调用的,所以它无法知道何时(例如)是内置命令(对于某些命令解释器而言)以及何时是外部命令(对于其他命令解释器而言)。4dos
4os2
setdos /i
help
唯一可靠的方法是使用您想要检查的命令解释器内置的命令。 其他人的外部命令,例如不同的人的、、where
等等,都会遇到与我的程序相同的问题。which
help
不幸的是,微软从未认为适合在其 中提供此类功能cmd
。
答案2
据我所知,命令解释器中嵌入的命令没有完整的列表……(至少,我还没有找到)但一个快速而粗略的方法是打开命令提示符……并清除 PATH 变量。任何仍然有效的命令都嵌入在 shell 中(或工作目录,如果有的话)……不再有效的命令……是位于机器某处的程序。