Чи є команда отримати список команд cmd у Windows?


16

Під час роботи на комп'ютері під керуванням Windows в режимі офлайн (без підключення до Інтернету), чи можна отримати / генерувати список доступних команд cmd (включаючи використання) через командний рядок?

Відповіді:


20

Список команд:

help

Детальніше про конкретну команду:

help <command>

або

<command> /?

Наприклад:

help xcopy
xcopy /?

Ви можете використовувати xcopy /?для отримання інформації про команду. :)
avirk

Можна також отримати список мережевих команд , як ping, arp, nslookup? Здається, що helpгенерується лише список основних команд Windows, а не мережевих команд.
amiregelz

2
@amiregelz: Це програми в windows\system32папці, на які я вважаю, що це виглядає при вирішенні програм / команд. Для вашого списку ви можете шукати там. Дивіться відповідь Олівера.
Джордж Дакетт

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 /?

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

Це також дозволяє здійснювати маніпуляції з рядком через вищезазначене "позначення тильди"


Як ви вважаєте, чи є спосіб отримати команди, перелічені тут, але не під час введення 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

На doseps.com ( CreateDosCommandIndex.bat ) є пакетний скрипт, який генерує файл html, що містить повний список доступних команд dos у системі, а також їх відповідний вихід, створений через "commandname /?"

Я повідомляю про це нижче, оскільки, здається, в 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

1
Дуже приємний підхід. Він зупиняється на Processing SCмені, хоча. Але, схоже, він лише чекає певного вкладу. Тож натискання Enterнехай закінчиться :)
Der Hochstapler

1
Це досить прохолодно (обробка і створення файлу HTML), хоча це зажадає від вас , щоб мати цей сценарій заздалегідь, в той час як він показує тільки команди , що helpкоманда показує (що легше виконати). Все-таки спасибі за вклад, це дуже корисно. @OliverSalzburg Це зупиняється і для мене.
amiregelz

3

Це не саме те, що ви шукаєте в режимі офлайн (вам потрібне підключення до Інтернету, щоб відкрити веб-сторінку), але це дуже корисний інструмент та посилання для команд cmd:

Індекс AZ командного рядка Windows CMD.


Це корисно, але це не те, що я шукаю. Все одно, дякую.
amiregelz

@amiregelz це офлайн-рішення, якщо ви завантажите його, наприклад, за допомогою wget.
барлоп

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...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.