¿Hay un comando para obtener una lista de comandos cmd en Windows?

Respuestas:

20

Para una lista de comandos:

help

Y para más detalles sobre un comando específico:

help <command>

o

<command> /?

Por ejemplo:

help xcopy
xcopy /?
bummi
fuente
Puede usar xcopy /?para obtener la información sobre el comando. :)
avirk
¿Es posible también obtener una lista de comandos como la creación de redes ping, arp, nslookup? Parece que helpsolo genera una lista de comandos básicos de Windows y no comandos de red.
amiregelz
2
@amiregelz: Esos son programas en la windows\system32carpeta que creo que se ve al resolver programas / comandos. Para su lista, puede buscar ex allí. Ver la respuesta de Oliver.
George Duckett el
14

Puede encontrar una lista oficial en la referencia de línea de comandos de Microsoft AZ . Aparte de eso...

Para responder su pregunta directamente, diseñé un script que simplemente enumera todos los .exearchivos que puede ejecutar (porque están ubicados en su PATH). De manera predeterminada, solo enumera aquellos que también residen %WINDIR%(a menos que lo ejecute con --all).

En una iteración anterior del script, comencé cada comando con /?, lo cual es una muy mala idea. No todas las aplicaciones en el PATHentiende ese parámetro. Algunos simplemente comenzarán y seguirán ejecutándose, en lugar de imprimir cualquier ayuda. Eso consume muchos recursos bastante rápido.

@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

Por lo tanto, allí. Esto le proporciona una lista de todos los comandos disponibles y sus parámetros. Como ya puede esperar, no es tan útil como uno podría imaginar.

¡Esto es lo que es realmente importante!

Más interesantes que los .exearchivos en su PATHson los cmd.exeincorporados. Al igual IF, FORy SET. No tengo una lista completa de los elementos integrados, pero puede ver la mayoría de ellos ejecutando 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

Sin embargo, en ese momento la ayuda hace referencia a extensiones de comando , por lo que la lista puede estar incompleta. Echemos un vistazo más de cerca a algunos elementos integrados:

PARA /?

La documentación del FORcomando enumera todos los parámetros locos a los que puede pasar FOR. Esta es la utilidad de acceso si desea escribir algo relacionado con bucles .

Esta documentación también contiene la explicación de la loca "notación tilde":

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

SI /?

IFes el comando para ramificar . Necesitará esta página porque enumera los operadores de comparación:

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 le permite realizar una amplia variedad de operaciones en variables.

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

También permite la manipulación de cadenas a través de la "notación de tilde" mencionada anteriormente

Der Hochstapler
fuente
¿Crees que hay una manera de obtener los comandos que se enumeran aquí pero no al escribir help? Por ejemplo, los comandos de red como ipconfig, nslookup, arp, telnety ping?
amiregelz
@amiregelz: debería funcionar bien ya que se encuentran en C:\Windows\System32. Supongo que está en elPATH
Der Hochstapler
No los enumera a pesar de que están ubicados allí. Enumera el ARP.EXEsin embargo. ¿Ves los comandos que mencioné cuando ejecutaste tu script?
amiregelz
@amiregelz: Sí, pero creo que hay un problema si PATHcontiene una carpeta que ya no existe. Eso hace que el guión se rompa. Tal vez ese es el problema? Estoy trabajando en una solución.
Der Hochstapler
2
@amiregelz: También parece que no es aconsejable iniciar todas las aplicaciones en su PATH: D
Der Hochstapler
6

Hay un script por lotes disponible en dostips.com ( CreateDosCommandIndex.bat ) que genera un archivo html que contiene la lista completa de comandos DOS disponibles en el sistema, junto con su salida respectiva generada a través de "commandname /?"

Lo estoy informando a continuación, ya que dostips.com parece tener problemas relacionados con la carga de db en este momento y su sitio web funciona de manera intermitente.

@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
fuente
1
Muy buen enfoque. Sin Processing SCembargo, se detiene para mí. Pero parece que solo está esperando alguna entrada. Entonces presionando Enterdéjalo terminar :)
Der Hochstapler
1
Es una pasada (procesamiento y generar el archivo html), a pesar de que no requieren que usted tenga que guión de antemano, mientras que sólo muestra los comandos que los helpespectáculos de mando (que es más fácil de ejecutar). Aún así, gracias por el aporte, es muy útil. @OliverSalzburg También se detiene allí para mí.
amiregelz
3

No es exactamente lo que está buscando una solución fuera de línea (necesita su conexión a Internet para abrir la página web), pero es una herramienta y referencia muy útil para los comandos cmd:

Un índice AZ de la línea de comando CMD de Windows.

Diogo
fuente
Es útil, pero no es lo que estoy buscando. Gracias de cualquier manera.
amiregelz
@amiregelz es una solución fuera de línea si la descarga, por ejemplo, con wget.
barlop
3

Sé que no es exactamente lo que está pidiendo, pero es posible que desee comenzar a aprender Powershell en lugar del símbolo del sistema. Microsoft está tratando de eliminar el símbolo del sistema para Powershell, por lo que sería una buena habilidad aprender.

Si está en Powershell, el comando Get-Commandenumerará todos los comandos que se pueden ejecutar actualmente desde todos los módulos cargados. Producirá una salida que se verá así:

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...
Scott Chamberlain
fuente