Ты делаешь помощь своей сестре.
Различие между резидентными и временными командами происходит от не виртуализированной архитектуры управления памятью, которая была в MS-DOS и CP/M. В операционных системах с виртуальной памятью по запросу, таких как Windows NT 6.1, это бессмысленно. Система не хранит вещи, встроенные в резидентный командный процессор, и программы, вызываемые командным процессором, не обязательно являются временными. Память просто не управляется одинаково.
Вы также оказываете помощь своей сестре, ссылаясь на список "команд DOS". Ваша операционная система не DOS и никогда не была DOS за всю свою историю. То, что верно для семейства операционных систем DOS, не обязательно относится к вашей операционной системе и ее интерпретатору команд.
Используемая вами терминология - это "встроенные команды", программный код которых встроен в исполняемый файл интерпретатора команд и выполняется в самом процессе интерпретатора команд, а не "внешние команды", чей код программы находится в отдельном образе исполняемой программы. и запускается в отдельном процессе.
С некоторыми интерпретаторами команд это очень просто; но это должен быть командный интерпретатор, который делает это.
Заменяющий интерпретатор команд JP Software TCC имеет встроенную команду - ?команда - отображает все включенные в данный момент встроенные команды. Получить список встроенных команд так же просто, как выполнить:
?
Мой командный интерпретатор имеет то же самое. То же самое можно сказать о cmd
от ReactOS. (Во всех наших командных интерпретаторах это одна и та же команда - ?
- на самом деле.) Все остальные интерпретаторы команд, для которых это возможно, будут иметь эту команду или команду с аналогичной функцией. (Оболочки для систем POSIX имеют, по-разному, встроенные команды с именами type
, whence
или which
, например.) Получение списка встроенных команд должно быть выполнено с помощью команды, встроенной в интерпретатор команд, потому что только что-то, имеющее доступ к внутренностям кода интерпретатора команд, знает, где найти список встроенных команд, которые интерпретатор команд Программа содержит и поддерживает.
Внешняя команда может быть написана с собственным списком встроенных команд. Я написал один такой сам, около двух десятилетий назад. Он знал все о командах, по-разному встроенных в command
, cmd
, 4dos
и 4os2
, потому что я создал свою собственную таблицу того, кто имеет какую встроенную команду, и поместил ее в программу. Но он не мог сказать, были ли какие-либо встроенные команды отключены с помощью setdos /i
, и это было во власти авторов этих интерпретаторов команд, которые добавляли новые встроенные команды в свои программы или просто не документировали некоторые команды. , И у него не было возможности узнать, из какого командного интерпретатора (если есть) он был вызван, поэтому он не мог знать, когда (например) help
была встроенной командой (как и для некоторых командных интерпретаторов) и когда это была внешняя команда (как и для других).
Единственный надежный метод - это команда, встроенная в интерпретатор команд, которую вы хотите проверить. Внешние команды других людей, такие как разные люди, where
, which
, help
и так далее, будут страдать от тех же проблем, что и моя программа.
К сожалению, Microsoft никогда не считала целесообразным предоставлять такую функциональность в своем cmd
.