Existe-t-il une commande pour obtenir une liste des commandes cmd dans Windows?

16

Lorsque vous travaillez sur un ordinateur exécutant Windows hors ligne (sans connexion Internet), est-il possible d'obtenir / générer une liste des commandes cmd disponibles (y compris l'utilisation) via la ligne de commande?

amiregelz
la source

Réponses:

20

Pour une liste de commandes:

help

Et pour plus de détails sur une commande spécifique:

help <command>

ou

<command> /?

Par exemple:

help xcopy
xcopy /?
bummi
la source
Vous pouvez utiliser xcopy /?pour obtenir les informations sur la commande. :)
avirk
Est - il possible d'obtenir une liste de commandes de réseau comme ping, arp, nslookup? Il semble que helpne génère qu'une liste de commandes Windows de base et non des commandes réseau.
amiregelz
2
@amiregelz: Ce sont des programmes dans le windows\system32dossier dans lesquels je pense qu'il regarde lors de la résolution de programmes / commandes. Pour votre liste, vous pouvez chercher des ex là-bas. Voir la réponse d'Oliver.
George Duckett
14

Vous pouvez trouver une liste officielle à la référence de ligne de commande Microsoft AZ . Par ailleurs...

Pour répondre directement à votre question, j'ai conçu un script qui répertorie simplement tous les .exefichiers que vous pouvez exécuter (car ils se trouvent sur votre PATH). Par défaut, il répertorie uniquement ceux qui résident également %WINDIR%(sauf si vous l'exécutez avec --all).

Dans une précédente itération du script, j'ai commencé chaque commande avec /?, ce qui est une très mauvaise idée. Toutes les applications du ne PATHcomprennent pas ce paramètre. Certains vont simplement démarrer et continuer à fonctionner, au lieu d'imprimer toute aide. Cela consomme donc beaucoup de ressources assez rapidement.

@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

Donc là. Cela vous donne une liste de toutes les commandes disponibles et de leurs paramètres. Comme vous pouvez déjà vous y attendre, ce n'est pas aussi utile qu'on pourrait l'imaginer.

Voici ce qui est vraiment important!

Les fonctions intégrées sont plus intéressantes que les .exefichiers sur votre ordinateur. Comme , et . Je n'ai pas de liste complète des fonctionnalités intégrées, mais vous pouvez voir la plupart d'entre elles en exécutant :PATHcmd.exeIFFORSETcmd.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

Cependant, à ce stade, l'aide fait référence aux extensions de commande , la liste peut donc être incomplète. Examinons de plus près certains éléments intégrés:

POUR /?

La documentation de la FORcommande répertorie tous les paramètres fous auxquels vous pouvez passer FOR. Il s'agit de l'utilitaire de référence si vous souhaitez écrire quoi que ce soit lié aux boucles .

Cette documentation contient également l'explication de la folle "notation 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 /?

IFest la commande de branchement . Vous aurez besoin de cette page car elle répertorie les opérateurs de comparaison:

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

ENSEMBLE /?

SET vous permet d'effectuer une grande variété d'opérations sur les 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

Il permet également la manipulation de chaînes via la "notation tilde" mentionnée ci-dessus.

Der Hochstapler
la source
Pensez-vous qu'il existe un moyen d'obtenir les commandes répertoriées ici, mais pas lors de la frappe help? Par exemple , les commandes de réseau aiment ipconfig, nslookup, arp, telnetet ping?
amiregelz
@amiregelz: devrait fonctionner correctement car ils se trouvent dans C:\Windows\System32. Je suppose que c'est lePATH
Der Hochstapler
Il ne les répertorie pas, même s'ils s'y trouvent. Il répertorie ARP.EXEcependant. Voyez-vous les commandes que j'ai mentionnées lorsque vous exécutez votre script?
amiregelz
@amiregelz: Oui, mais je pense qu'il y a un problème si votre PATHcontient un dossier qui n'existe plus. Cela provoque la rupture du script. C'est peut-être le problème? Je travaille sur un correctif.
Der Hochstapler
2
@amiregelz: Il semble également qu'il n'est pas si sage de démarrer chaque application sur votre PATH: D
Der Hochstapler
6

Il y a un script batch disponible sur dostips.com ( CreateDosCommandIndex.bat ) qui génère un fichier html contenant la liste complète des commandes dos disponibles sur le système, ainsi que leur sortie respective générée via "commandname /?"

Je le signale ci-dessous car dostips.com semble avoir des problèmes liés à la charge de base de données en ce moment et leur site Web fonctionne par intermittence.

@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
la source
1
Très belle approche. Processing SCMais ça s'arrête pour moi. Mais il semble qu'il n'attende que des informations. Donc, en appuyant, Enterlaissez-le finir :)
Der Hochstapler
1
Il est assez cool (traitement et générer le fichier html), mais il ne vous avez besoin d'avoir ce script à l' avance, alors qu'il ne montre que les commandes que les helpémissions de commande ( ce qui est plus facile à exécuter). Pourtant, merci pour l'entrée, c'est très utile. @OliverSalzburg Cela s'arrête là aussi pour moi.
amiregelz du
3

Ce n'est pas exactement ce que vous recherchez pour une solution hors ligne (vous avez besoin de votre connexion Internet pour ouvrir la page Web), mais c'est un outil très utile et une référence pour les commandes cmd:

Un index AZ de la ligne de commande Windows CMD.

Diogo
la source
C'est utile, mais ce n'est pas ce que je recherche. Merci quand même.
amiregelz
@amiregelz c'est une solution hors ligne si vous la téléchargez par exemple avec wget.
barlop
3

Je sais que ce n'est pas exactement ce que vous demandez, mais vous voudrez peut-être commencer à apprendre Powershell au lieu de l'invite de commande. Microsoft essaie d'éliminer progressivement l'invite de commande pour Powershell, ce serait donc une bonne compétence à apprendre.

Si vous êtes dans Powershell, la commande Get-Commandrépertorie toutes les commandes qui peuvent actuellement être exécutées à partir de tous les modules chargés. Il produira une sortie qui ressemble à ceci:

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
la source