Você está fazendo sua irmã um dis-service.
A distinção entre comandos "residentes" e "transitórios" vem de uma arquitetura de gerenciamento de memória não virtualizada que estava no MS-DOS e no CP / M. Em sistemas operacionais de memória virtual com paginação por demanda, como o Windows NT 6.1, não tem sentido. O sistema não mantém as coisas embutidas no residente do processador de comandos e os programas invocados pelo processador de comandos não são necessariamente transitórios. A memória simplesmente não é gerenciada da mesma maneira.
Você também está fazendo sua irmã um dis-service referenciando uma lista de "comandos DOS". Seu sistema operacional não é DOS e nunca foi o DOS em toda a sua história. O que é verdade sobre a família DOS de sistemas operacionais não é necessariamente o caso do seu sistema operacional e seu interpretador de comandos.
A terminologia que você está procurando é "comandos embutidos", cujo código de programa é embutido no executável do interpretador de comandos e é executado no próprio processo do interpretador de comandos, versus "comandos externos", cujo código de programa está separado imagem do programa executável e é executada em um processo separado.
Com alguns intérpretes de comandos, isso é fácil; mas tem que ser o interpretador de comandos que faz isso.
O intérprete de comandos de substituição da JP Software TCC possui um comando - o ? comando - que exibe todos os comandos incorporados atualmente ativados. Obter a lista de comandos internos é tão simples quanto executar:
?
Meu intérprete de comando tem a mesma coisa. O mesmo acontece com o cmd
do ReactOS. (Em todos os nossos intérpretes de comando, é o mesmo comando - ?
- na verdade.) Todos os outros interpretadores de comandos em que isso é possível terão isso ou um comando com função semelhante. ( Os shells para sistemas POSIX possuem, de forma variada, comandos internos chamados type
, whence
ou which
Obtendo a lista de comandos embutidos tem para ser feito através de um comando embutido no interpretador de comandos, porque apenas algo com acesso às entranhas do código do interpretador de comandos sabe onde encontre a lista de comandos incorporados que o programa do interpretador de comandos contém e mantém.
É possível que um comando externo seja escrito com a lista própria de comandos internos. Eu escrevi um desses eu mesmo, cerca de duas décadas atrás. Ele sabia tudo sobre os comandos incorporados a command
, cmd
, 4dos
e 4os2
, porque construí minha própria tabela de quem tinha o comando interno e o colocava no programa. Mas não tinha como saber se algum comando interno havia sido desabilitado com setdos /i
, e estava consistentemente à mercê dos autores desses intérpretes de comandos adicionando novos comandos internos aos seus programas ou simplesmente não documentando alguns comandos. . E não tinha como saber qual interpretador de comandos (se algum) era invocado, portanto, não poderia saber quando (por exemplo) help
era um comando interno (como é para alguns dos interpretadores de comandos) e quando era um comando externo (como é para os outros).
O único método confiável é um comando incorporado ao interpretador de comandos que você deseja verificar. Comandos externos de outras pessoas, como where
, which
, help
e várias pessoas assim por diante todos sofrerão dos mesmos problemas que meu programa fez.
Infelizmente, a Microsoft nunca achou por bem fornecer tal funcionalidade em seu cmd
.