Czy istnieje polecenie, aby uzyskać listę poleceń cmd w systemie Windows?

16

Czy podczas pracy na komputerze z systemem Windows w trybie offline (bez połączenia z Internetem) można uzyskać / wygenerować listę dostępnych poleceń cmd (łącznie z użyciem) za pomocą wiersza polecenia?

amiregelz
źródło

Odpowiedzi:

20

Aby uzyskać listę poleceń:

help

Aby uzyskać szczegółowe informacje na temat określonego polecenia:

help <command>

lub

<command> /?

Na przykład:

help xcopy
xcopy /?
bummi
źródło
Możesz użyć, xcopy /?aby uzyskać informacje o poleceniu. :)
avirk
Jest to możliwe również uzyskać listę poleceń sieciowych takich jak ping, arp, nslookup? Wygląda na to, że helpgeneruje tylko listę podstawowych poleceń systemu Windows, a nie poleceń sieciowych.
amiregelz
2
@amiregelz: Są to programy w windows\system32folderze, które, jak sądzę, wyglądają podczas rozwiązywania programów / poleceń. Na liście możesz znaleźć exe. Zobacz odpowiedź Olivera.
George Duckett
14

Oficjalną listę można znaleźć na stronie AZ w wierszu polecenia Microsoft . Poza tym...

Aby odpowiedzieć bezpośrednio na twoje pytanie, opracowałem skrypt, który po prostu wyświetla listę wszystkich .exeplików, które możesz wykonać (ponieważ znajdują się one na twoim PATH). Domyślnie wyświetla tylko te, które również znajdują się w %WINDIR%(chyba że go uruchomisz --all).

W poprzedniej iteracji skryptu rozpocząłem każdą komendę /?, co jest bardzo złym pomysłem. Nie każda aplikacja PATHobsługuje ten parametr. Niektóre po prostu zaczną działać i będą działać, zamiast drukowania jakiejkolwiek pomocy. Dzięki temu dość szybko zjada wiele zasobów.

@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

Więc tam. To daje listę wszystkich dostępnych poleceń i ich parametrów. Jak można się już spodziewać, nie jest to tak przydatne, jak można sobie wyobrazić.

Oto, co jest naprawdę ważne!

Bardziej interesujące niż .exepliki na dysku PATHcmd.exeZabudowy. Jak IF, FORi SET. Nie mam pełnej listy wbudowanych funkcji, ale większość z nich można wyświetlić, uruchamiając 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

Chociaż w tym momencie pomoc odnosi się do rozszerzeń poleceń , więc lista może być niekompletna. Przyjrzyjmy się bliżej niektórym wbudowanym funkcjom:

DLA /?

Dokumentacja FORpolecenia zawiera wszystkie szalone parametry, które można przekazać FOR. Jest to narzędzie go-to, jeśli chcesz pisać cokolwiek związanego z pętlami .

Ta dokumentacja zawiera również wyjaśnienie szalonego „zapisu tyldy”:

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

GDYBY /?

IFto polecenie rozgałęziania . Będziesz potrzebować tej strony, ponieważ zawiera ona operatory porównania:

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 pozwala na wykonywanie szerokiej gamy operacji na zmiennych.

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

Umożliwia także manipulację ciągiem znaków za pomocą wyżej wspomnianego „zapisu tyldy”

Der Hochstapler
źródło
Czy uważasz, że istnieje sposób, aby uzyskać polecenia wymienione tutaj, ale nie podczas pisania help? Polecenia sieciowe np podoba ipconfig, nslookup, arp, telneti ping?
amiregelz
@amiregelz: Powinno działać dobrze, ponieważ się znajdują C:\Windows\System32. Zakładam, że jest toPATH
Der Hochstapler
Nie ma ich na liście, nawet jeśli się tam znajdują. Wymienia to ARP.EXEjednak. Czy widzisz polecenia, o których wspomniałem podczas wykonywania skryptu?
amiregelz
@amiregelz: Tak, ale myślę, że jest problem, jeśli Twój PATHfolder już nie istnieje. To powoduje uszkodzenie skryptu. Może to jest problem? Pracuję nad poprawką.
Der Hochstapler
2
@amiregelz: Wydaje się również, że nie jest mądrze uruchamiać każdą aplikację na PATH: D
Der Hochstapler
6

Dostępny jest skrypt wsadowy na stronie dostips.com ( CreateDosCommandIndex.bat ), który generuje plik HTML zawierający pełną listę dostępnych poleceń dos w systemie wraz z odpowiadającymi im danymi wyjściowymi wygenerowanymi przez „nazwa polecenia /?”

Zgłaszam to poniżej, ponieważ wydaje się, że dostips.com ma obecnie problemy związane z ładowaniem bazy danych, a ich strona internetowa działa sporadycznie.

@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
źródło
1
Bardzo fajne podejście. Processing SCAle dla mnie to się kończy . Ale wygląda na to, że czeka tylko na jakiś wkład. Więc naciśnięcie Enterniech skończy :)
Der Hochstapler
1
To całkiem fajne (przetwarzanie i generowanie pliku HTML), choć nie wymaga posiadania tego skryptu wcześniej, a to pokazuje tylko polecenia, że helppokazy poleceń (co jest łatwiejsze do wykonania). Mimo to, dzięki za wkład, jest bardzo przydatny. @OliverSalzburg To też się tu kończy.
amiregelz
3

Nie jest to dokładnie to, czego szukasz rozwiązanie offline (potrzebujesz połączenia z Internetem, aby otworzyć stronę), ale jest to bardzo przydatne narzędzie i odniesienie do poleceń cmd:

Indeks AZ wiersza polecenia systemu Windows CMD.

Diogo
źródło
Jest to przydatne, ale nie tego szukam. W każdym razie dzięki.
amiregelz,
@amiregelz jest to rozwiązanie offline, jeśli pobierzesz je np. za pomocą wget.
barlop
3

Wiem, że nie jest to dokładnie to, o co prosisz, ale możesz zacząć uczyć się programu PowerShell zamiast wiersza polecenia. Firma Microsoft próbuje wycofać wiersz polecenia programu PowerShell, aby można było się nauczyć.

Jeśli jesteś w Powershell, polecenie Get-Commandwyświetli listę wszystkich poleceń, które można obecnie uruchomić ze wszystkich załadowanych modułów. Wytworzy to wynik, który wygląda następująco:

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
źródło