Esiste un comando per ottenere un elenco di comandi cmd in Windows?


Risposte:


20

Per un elenco di comandi:

help

E per i dettagli su un comando specifico:

help <command>

o

<command> /?

Per esempio:

help xcopy
xcopy /?

È possibile utilizzare xcopy /?per ottenere le informazioni sul comando. :)
avirk

E 'possibile ottenere anche una lista di comandi come networking ping, arp, nslookup? Sembra che helpgeneri solo un elenco di comandi Windows di base e non comandi di rete.
amiregelz,

2
@amiregelz: quelli sono i programmi nella windows\system32cartella in cui credo si guardi quando si risolvono programmi / comandi. Per la tua lista potresti cercare ex lì. Vedi la risposta di Oliver.
George Duckett,

14

È possibile trovare un elenco ufficiale nell'AZ di riferimento della riga di comando di Microsoft . A parte quello...

Per rispondere direttamente alla tua domanda, ho ideato uno script che elenca semplicemente tutti i .exefile che puoi eseguire (perché si trovano sul tuo PATH). Per impostazione predefinita, elenca solo quelli che risiedono anche %WINDIR%(a meno che non venga eseguito con --all).

In una precedente iterazione dello script, ho avviato ogni comando con /?, che è una pessima idea. Non tutte le applicazioni PATHcomprendono questo parametro. Alcuni semplicemente inizieranno e rimarranno in esecuzione, invece di stampare qualsiasi aiuto. In questo modo si consumano molte risorse piuttosto rapidamente.

@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

Quindi, ecco. Questo ti dà un elenco di tutti i comandi disponibili e i loro parametri. Come puoi già aspettarti, non è così utile come si potrebbe immaginare.

Ecco cosa è veramente importante!

Più interessanti dei .exefile sul tuo PATHsono i cmd.exebuilt-in. Mi piace IF, FORe SET. Non ho un elenco completo dei built-in, ma puoi vederne la maggior parte eseguendo 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

Tuttavia, a quel punto la guida fa riferimento alle estensioni di comando , quindi l'elenco potrebbe essere incompleto. Diamo un'occhiata più da vicino ad alcuni built-in:

PER /?

La documentazione per il FORcomando elenca tutti i parametri pazzi a cui puoi passare FOR. Questa è l'utilità di riferimento se si desidera scrivere qualcosa correlato ai loop .

Questa documentazione contiene anche la spiegazione della folle "notazione 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

SE /?

IFè il comando per la ramificazione . Avrai bisogno di questa pagina perché elenca gli operatori di confronto:

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

IMPOSTATO /?

SET consente di eseguire un'ampia varietà di operazioni sulle variabili.

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

Permette anche la manipolazione delle stringhe attraverso la "notazione tilde" sopra menzionata


Pensi che ci sia un modo per ottenere i comandi elencati qui ma non durante la digitazione help? Comandi di rete per esempio come ipconfig, nslookup, arp, telnete ping?
amiregelz,

@amiregelz: dovrebbe funzionare bene come si trovano in C:\Windows\System32. Presumo che sia ilPATH
Der Hochstapler il

Non li elenca anche se si trovano lì. Elenca il ARP.EXEperò. Vedi i comandi che ho citato quando esegui il tuo script?
amiregelz,

@amiregelz: Sì, ma penso che ci sia un problema se il tuo PATHcontiene una cartella che non esiste più. Ciò provoca l'interruzione dello script. Forse è questo il problema? Sto lavorando a una correzione.
Der Hochstapler,

2
@amiregelz: Inoltre sembra che non sia saggio avviare ogni applicazione sul tuo PATH: D
Der Hochstapler

6

C'è uno script batch disponibile su dostips.com ( CreateDosCommandIndex.bat ) che genera un file html contenente l'elenco completo dei comandi dos disponibili sul sistema, insieme al rispettivo output generato tramite "nome comando /?"

Lo sto segnalando di seguito poiché dostips.com sembra avere problemi relativi al caricamento in db in questo momento e il loro sito Web funziona in modo intermittente.

@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
Approccio molto bello. Si ferma Processing SCper me però. Ma sembra solo che stia aspettando qualche input. Quindi premendo Enterlascia che finisca :)
Der Hochstapler,

1
E 'piuttosto fresco (lavorazione e la generazione del file html), anche se non si richiede di avere lo script in anticipo, mentre mostra solo i comandi che gli helpspettacoli di comando (che è più facile da eseguire). Tuttavia, grazie per l'input, è molto utile. @OliverSalzburg Si ferma anche per me.
amiregelz,

3

Non è esattamente quello che stai cercando una soluzione offline (hai bisogno della tua connessione Internet per aprire la pagina web), ma è uno strumento molto utile e un riferimento per i comandi cmd:

Un indice AZ della riga comandi CMD di Windows.


È utile, ma non è quello che sto cercando. Grazie comunque.
amiregelz,

@amiregelz è una soluzione offline se la scarichi ad es. con wget.
barlop

3

So che non è esattamente quello che stai chiedendo, ma potresti voler iniziare a imparare Powershell invece del prompt dei comandi. Microsoft sta cercando di eliminare gradualmente il prompt dei comandi per Powershell, quindi sarebbe una buona abilità imparare.

Se ci si trova in Powershell, il comando Get-Commandelencherà tutti i comandi che possono essere attualmente eseguiti da tutti i moduli caricati. Produrrà un output simile al seguente:

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...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.