Есть ли команда для получения списка команд cmd в Windows?

16

При работе на компьютере под управлением Windows в автономном режиме (без подключения к Интернету) возможно ли получить / сгенерировать список доступных команд cmd (включая использование) через командную строку?

amiregelz
источник

Ответы:

20

Для списка команд:

help

И для деталей о конкретной команде:

help <command>

или

<command> /?

Например:

help xcopy
xcopy /?
bummi
источник
Вы можете использовать, xcopy /?чтобы получить информацию о команде. :)
avirk
Можно также получить список сетевых команд , как ping, arp, nslookup? Кажется, что helpтолько генерирует список основных команд Windows, а не сетевых команд.
amiregelz
2
@amiregelz: Это программы в windows\system32папке, которые, я полагаю, смотрят при разрешении программ / команд. Для вашего списка вы можете искать exes там. Смотрите ответ Оливера.
Джордж Дакетт
14

Вы можете найти официальный список в справочнике командной строки Microsoft AZ . Кроме того...

Чтобы ответить на ваш вопрос напрямую, я разработал сценарий, который просто перечисляет все .exeфайлы, которые вы можете выполнить (потому что они расположены на вашем PATH). По умолчанию в нем перечислены только те, которые также находятся в нем %WINDIR%(если только вы не запускаете его --all).

В предыдущей итерации сценария я начинал каждую команду /?, что является очень плохой идеей. Не каждое приложение PATHпонимает этот параметр. Некоторые просто запускаются и продолжают работать, вместо того, чтобы печатать какую-либо помощь. Так что довольно быстро съедает много ресурсов.

@SETLOCAL ENABLEEXTENSIONS 
@ECHO OFF

IF "%1"=="--all" (
    SET LIST_ALL=TRUE
)
CALL :printPath "%PATH%"
:printPath
FOR /F "tokens=1,* delims=;" %%A IN ("%~1") DO (
    IF EXIST "%%A" (
        PUSHD "%%A"
        FOR %%F IN (*.exe) DO (
            ECHO.%%~dnpfF | FINDSTR /C:"%WINDIR%" 1> NUL
            IF ERRORLEVEL 1 (
                IF "%LIST_ALL%"=="TRUE" ECHO.%%~dnpfF
            ) ELSE (
                ECHO.%%~dnpfF
            )
        )
        POPD
    ) ELSE (
        REM ECHO Skipping non-existent folder '%%A'
    )
    CALL :printPath "%%~B"
)
ENDLOCAL

Здесь. Это дает вам список всех доступных команд и их параметров. Как вы уже можете ожидать, это не так полезно, как можно себе представить.

Вот что действительно важно!

Более интересные , чем .exeфайлы на вашем PATHявляются cmd.exeвстроенными модулями. Как IF, FORи SET. У меня нет полного списка встроенных модулей, но вы можете увидеть большинство из них, запустив cmd.exe /?:

DEL or ERASE
COLOR
CD or CHDIR
MD or MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (also includes changes to external command invocation)
ASSOC
FTYPE

Хотя в этот момент справка ссылается на расширения команд , поэтому список может быть неполным. Давайте внимательнее посмотрим на некоторые встроенные модули:

ЗА /?

В документации по FORкоманде перечислены все безумные параметры, которые вы можете передать FOR. Это полезная утилита, если вы хотите написать что-либо, связанное с циклами .

Эта документация также содержит объяснение безумной «тильду нотации»:

In addition, substitution of FOR variable references has been enhanced
You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:

    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line

ЕСЛИ /?

IFКоманда для ветвления . Вам понадобится эта страница, потому что она перечисляет операторы сравнения:

If Command Extensions are enabled IF changes as follows:

    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command

where compare-op may be one of:

    EQU - equal
    NEQ - not equal
    LSS - less than
    LEQ - less than or equal
    GTR - greater than
    GEQ - greater than or equal

УСТАНАВЛИВАТЬ /?

SET позволяет выполнять самые разнообразные операции с переменными.

The /A switch specifies that the string to the right of the equal sign
is a numerical expression that is evaluated.  The expression evaluator
is pretty simple and supports the following operations, in decreasing
order of precedence:

    ()                  - grouping
    ! ~ -               - unary operators
    * / %               - arithmetic operators
    + -                 - arithmetic operators
    << >>               - logical shift
    &                   - bitwise and
    ^                   - bitwise exclusive or
    |                   - bitwise or
    = *= /= %= += -=    - assignment
      &= ^= |= <<= >>=
    ,                   - expression separator

Она также позволяет манипуляции строк через вышеупомянутую «тильду нотации»

Der Hochstapler
источник
Как вы думаете , есть ли способ , чтобы получить команды, которые перечислены здесь , но не тогда , когда печатать help? Например , сетевые команды типа ipconfig, nslookup, arp, telnetи ping?
amiregelz
@amiregelz: отлично работает , так как они расположены в C:\Windows\System32. Я предполагаю , что это наPATH
Der Hochstapler
Это не перечислить их , даже если они находятся там. В нем перечислены все ARP.EXEже. Вы видите команды я уже упоминал , когда вы выполняете свой сценарий?
amiregelz
@amiregelz: Да, но я думаю , что есть проблема , если ваши PATHсодержит папку , которая больше не существует. Это вызывает сценарий сломать. Может в этом проблема? Я работаю над исправлением.
Der Hochstapler
2
@amiregelz: Кроме того , кажется, что это не то, что разумно начать все приложения на PATH: D
Der Hochstapler
6

Там в пакетном скрипт доступен на dostips.com ( CreateDosCommandIndex.bat ) , который генерирует файл HTML , содержащий полный список доступных команд дос в системе, наряду с их соответствующим выходом , генерируемым с помощью «имя_команд /?»

Я сообщаю это ниже, так как dostips.com, похоже, проблемы, связанные с БД нагрузки в это время, и их веб-сайт работает с перебоями.

@ECHO OFF
REM.-- Prepare the Command Processor
SETLOCAL ENABLEEXTENSIONS

REM --
REM -- Copyright note
REM -- This script is provided as is.  No waranty is made, whatso ever.
REM -- You may use and modify the script as you like, but keep the version history with
REM -- recognition to http://www.dostips.com in it.
REM --

REM Version History:
REM         XX.XXX      YYYYMMDD Author Description
SET "version=01.000"  &:20051201 p.h.   initial version, origin http://www.dostips.com
SET "version=01.001"  &:20060122 p.h.   Fix missing exclamation marks in documentation (http://www.dostips.com)
SET "version=01.002"  &:20060218 p.h.   replaced TEXTAREA with PRE XMP (http://www.dostips.com)
SET "version=01.003"  &:20060218 p.h.   php embedding (http://www.dostips.com)
SET "version=01.004"  &:20060723 p.h.   fix page links for FireFox (http://www.dostips.com)
SET "version=01.005"  &:20061015 p.h.   invoke HELP via '"call" help', allows overriding help command with a help.bat file (http://www.dostips.com)
SET "version=01.006"  &:20061015 p.h.   cleanup progress indicator (http://www.dostips.com)
SET "version=01.007"  &:20080316 p.h.   use codepage 1252 to support european users (http://www.dostips.com)
SET "version=02.000"  &:20080316 p.h.   use FOR command to generate HTML, avoids most escape characters (http://www.dostips.com)
SET "version=02.000"  &:20100201 p.h.   now using css and xhtml
REM !! For a new version entry, copy the last entry down and modify Date, Author and Description
SET "version=%version: =%"

for /f "delims=: tokens=2" %%a in ('chcp') do set "restore_codepage=%%a"
chcp 1252>NUL

set "z=%~dpn0.htm"

rem echo.^<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"^> >"%z%"
echo.^<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"^> >"%z%"

set "title=DOS Command Index"
for /f "tokens=*" %%a in ('ver') do set "winver=%%a"

echo.Creating the header ...
for %%A in (
            "<html lang='en-US' xml:lang='en-US' xmlns='http://www.w3.org/1999/xhtml'>"
            "<head>"
            "<style type='text/css'>"
            "  h1              {text-align:center;}"
            "  h2              {text-align:center;}"
            "  table.center    {margin-left: auto;margin-right: auto;}"
            "  td              {text-align:left;}"
            "  div.center      {text-align:center;}"
            "  div.sourcebatch {background: #DDDDDD;}"
            "  div.helptext    {background: #F8F8FF;}"
            "  div.top         {float: right;}"
            "</style>"
            "<title>%title%</title>"
            "<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />"
            "</head>"
            "<body bgcolor='#FFFFCC'>"
            "<font color='darkblue'>"
            "<h1>%title%</h1>"
            "<div class='center'>"
            "<table class='center' border='1' cellspacing='1' cellpadding='3'>"
            "    <tr><td>Windows Version</td><td>:</td><td>%winver%</td></tr>"
            "    <tr><td>Document Source</td><td>:</td><td>"
            "        <a href='http://www.dostips.com/'><b>http://www.dostips.com</a><br />"
            "        <a href='http://www.dostips.com/%~n0.php'><b>http://www.dostips.com/%~nx0.php</a>"
            "        </td></tr>"
            "    <tr><td>Created by</td><td>:</td><td><a href='http://www.dostips.com/%~nx0'>"
            "        <b>%~nx0</b></a><br /><a href='#%~n0'><b>Source Code below</b></a></td></tr>"
            "</table>"
            "</div>"
            "<br /><br />"
            "<table class='center'>"
            ) do echo.%%~A>>"%z%"

echo.Creating the index ...
set /a cnt=0
for /f "tokens=1,*" %%a in ('"help|findstr /v /b /c:" " /c:"For more""') do (
    for %%A in (
            "    <tr><td><a href='#%%a'>%%a</a></td><td>%%b</td></tr>"
            ) do echo.%%~A>>"%z%"
    set /a cnt+=1
)
for %%A in (
            "</table>"
            "<br /><br />"
            ) do echo.%%~A>>"%z%"

echo.Extracting HELP text ...
call:initProgress cnt
for /f %%a in ('"help|findstr /v /b /c:" " /c:"For more""') do (
    echo.Processing %%a
    for %%A in (
            "<div class='top'><a href='#'>TOP</a></div>"
            "<h2><a name='%%a'>%%a</a></h2>"
            "<div class='helptext'><pre><xmp>"
            ) do echo.%%~A>>"%z%"
    call help %%a >>"%z%" 2>&1
    echo ^</xmp^> >>"%z%"
    for %%A in (
            "</pre></div>"
            ) do echo.%%~A>>"%z%"
    call:tickProgress
)

echo.Injecting source script ...
for %%A in (
            ""
            "<br /><br />"
            "<div class='center'>"
            "<div class='top'><a href='#'>TOP</a></div>"
            "<a name='%~n0'><h2>DOS Batch Script Source that created this Document</h2></a>"
            "This %title% has been created automatically by the following DOS batch script:"
            "<br /><br />"
            "</div>"
            "<div class='sourcebatch'><pre><xmp>"
            ) do echo.%%~A>>"%z%"
type "%~f0" >>"%z%"

echo.Creating the footer ...
echo ^</xmp^> >>"%z%"
for %%A in (
            "</pre></div>"
            ""
            "</font>"
            "</body>"
            "</html>"
            ) do echo.%%~A>>"%z%"


chcp %restore_codepage%>NUL
explorer "%z%"

:SKIP
REM.-- End of application
FOR /l %%a in (5,-1,1) do (TITLE %title% -- closing in %%as&ping -n 2 -w 1 127.0.0.1>NUL)
TITLE Press any key to close the application&ECHO.&GOTO:EOF


::-----------------------------------------------------------
::helper functions follow below here
::-----------------------------------------------------------


:initProgress -- initialize an internal progress counter and display the progress in percent
::            -- %~1: in  - progress counter maximum, equal to 100 percent
::            -- %~2: in  - title string formatter, default is '[P] completed.'
set /a "ProgressCnt=-1"
set /a "ProgressMax=%~1"

set "ProgressFormat=%~2"
if "%ProgressFormat%"=="" set "ProgressFormat=[PPPP]"
set "ProgressFormat=%ProgressFormat:[PPPP]=[P] completed.%"
call :tickProgress
GOTO:EOF


:tickProgress -- display the next progress tick
set /a "ProgressCnt+=1"
SETLOCAL
set /a "per=100*ProgressCnt/ProgressMax"
set "per=%per%%%"
call title %%ProgressFormat:[P]=%per%%%
GOTO:EOF
adriano72
источник
1
Очень хороший подход. Он останавливается на Processing SCменя , хотя. Но, похоже , это только ждет какой - то вход. Так нажав Enterпусть закончить :)
Der Hochstapler
1
Это довольно прохладно (обработка и генерации файла HTML), хотя это потребует от вас , чтобы иметь этот сценарий заранее, в то время как он показывает только команды , что helpкоманда показывает (что легче выполнить). Тем не менее, спасибо за вход, это очень полезно. @OliverSalzburg Он останавливается там для меня , как хорошо.
amiregelz
3

Это не совсем то, что вы ищете автономного решения (нужно вам подключение к Интернету, чтобы открыть веб-страницу), но является очень полезным справочным инструментом для CMD команд:

AZ Индекс командной строки Windows, CMD.

Диого
источник
Это полезно, но это не то , что я ищу. Спасибо, в любом случае.
amiregelz
@amiregelz это автономное решение, если вы загружаете его, например, с помощью wget.
barlop
3

Я знаю, что это не совсем то, что вы просите, но вы можете начать изучать Powershell вместо командной строки. Microsoft пытается поэтапному отказу в командной строке для Powershell так, что это будет хороший навык, чтобы учиться.

Если вы находитесь в Powershell команда Get-Commandвыведет список всех команд , которые в настоящее время могут быть запущены из всех загруженных модулей. Он будет производить вывод , который выглядит следующим образом :

CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
Cmdlet          Add-Member                      Add-Member [-MemberType] <PS...
Cmdlet          Add-PSSnapin                    Add-PSSnapin [-Name] <String...
Cmdlet          Clear-Content                   Clear-Content [-Path] <Strin...
Скотт Чемберлен
источник