Apakah ada perintah untuk mendapatkan daftar perintah cmd di Windows?

16

Ketika bekerja pada komputer yang menjalankan Windows offline (tanpa koneksi Internet), apakah mungkin untuk mendapatkan / menghasilkan daftar perintah cmd yang tersedia (termasuk penggunaan) melalui baris perintah?

amiregelz
sumber

Jawaban:

20

Untuk daftar perintah:

help

Dan untuk perincian tentang perintah tertentu:

help <command>

atau

<command> /?

Sebagai contoh:

help xcopy
xcopy /?
bummi
sumber
Anda dapat menggunakan xcopy /?untuk mendapatkan informasi tentang perintah. :)
avirk
Apakah mungkin untuk juga mendapatkan daftar perintah jaringan seperti ping, arp, nslookup? Tampaknya helphanya menghasilkan daftar perintah Windows dasar dan bukan perintah jaringan.
amiregelz
2
@ amiregelz: Itu adalah program dalam windows\system32folder yang saya percaya terlihat ketika menyelesaikan program / perintah. Untuk daftar Anda, Anda bisa mencari ongkos di sana. Lihat jawaban Oliver.
George Duckett
14

Anda dapat menemukan daftar resmi di referensi Microsoft Command-line AZ . Selain itu...

Untuk menjawab pertanyaan Anda secara langsung, saya membuat skrip yang berisi daftar semua .exefile yang dapat Anda jalankan (karena mereka ada di Anda PATH). Secara default, ini hanya mencantumkan orang-orang yang juga tinggal %WINDIR%(kecuali jika Anda menjalankannya --all).

Dalam iterasi script sebelumnya, saya memulai setiap perintah dengan /?, yang merupakan ide yang sangat buruk. Tidak semua aplikasi PATHmemahami parameter itu. Beberapa hanya akan mulai dan tetap berjalan, alih-alih mencetak bantuan. Sehingga memakan banyak sumber daya agak cepat.

@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

Jadi disana. Ini memberi Anda daftar semua perintah yang tersedia dan parameternya. Seperti yang dapat Anda harapkan, itu tidak berguna seperti yang dibayangkan.

Inilah yang sangat penting!

Lebih menarik dari pada .exefile Anda PATHadalah cmd.exebuilt-in. Suka IF, FORdan SET. Saya tidak memiliki daftar lengkap built-in, tetapi Anda dapat melihat sebagian besar dari mereka dengan menjalankan 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

Padahal, pada saat itu bantuannya merujuk ekstensi perintah , sehingga daftar mungkin tidak lengkap. Mari kita lihat lebih dekat beberapa built-in:

UNTUK /?

Dokumentasi untuk FORperintah ini mencantumkan semua parameter gila yang dapat Anda lewati FOR. Ini adalah utilitas masuk jika Anda ingin menulis sesuatu yang berhubungan dengan loop .

Dokumentasi ini juga berisi penjelasan untuk "notasi tilde" yang gila:

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

JIKA /?

IFadalah perintah untuk bercabang . Anda akan memerlukan halaman ini karena mencantumkan operator perbandingan:

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 memungkinkan Anda untuk melakukan berbagai operasi pada variabel.

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

Ini juga memungkinkan untuk manipulasi string melalui "notasi tilde" yang disebutkan di atas.

Der Hochstapler
sumber
Apakah Anda pikir ada cara untuk mendapatkan perintah yang terdaftar di sini tetapi tidak saat mengetik help? Perintah jaringan misalnya seperti ipconfig, nslookup, arp, telnetdan ping?
amiregelz
@ amiregelz: Seharusnya berfungsi dengan baik karena mereka berada di C:\Windows\System32. Saya berasumsi itu ada diPATH
Der Hochstapler
Itu tidak mencantumkan mereka meskipun mereka berada di sana. Itu daftar ARP.EXEmeskipun. Apakah Anda melihat perintah yang saya sebutkan ketika Anda menjalankan skrip Anda?
amiregelz
@ amiregelz: Ya, tapi saya pikir ada masalah jika Anda PATHberisi folder yang tidak ada lagi. Itu menyebabkan skrip rusak. Mungkin itu masalahnya? Saya sedang mengerjakan perbaikan.
Der Hochstapler
2
@amiregelz: Sepertinya tidak bijaksana untuk memulai setiap aplikasi pada Anda PATH: D
Der Hochstapler
6

Ada skrip batch yang tersedia di dostips.com ( CreateDosCommandIndex.bat ) yang menghasilkan file html yang berisi daftar lengkap perintah dos yang tersedia di sistem, bersama dengan output masing-masing yang dihasilkan melalui "commandname /?"

Saya melaporkannya di bawah ini karena dostips.com tampaknya memiliki masalah terkait pemuatan db saat ini dan situs web mereka bekerja sebentar-sebentar.

@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
sumber
1
Pendekatan yang sangat bagus. Itu berhenti Processing SCuntuk saya. Tapi sepertinya hanya menunggu beberapa masukan. Jadi menekan, Enterbiarkan saja selesai :)
Der Hochstapler
1
Itu cukup keren (pengolahan & menghasilkan file html), meskipun tidak mengharuskan Anda untuk memiliki script yang sebelumnya, sementara itu hanya menunjukkan perintah bahwa helpmenunjukkan perintah (yang lebih mudah untuk mengeksekusi). Meski begitu, terima kasih atas masukannya, ini sangat berguna. @ OliverSalzburg Itu berhenti di sana untuk saya juga.
amiregelz
3

Ini bukan apa yang Anda cari solusi offline (Anda membutuhkan koneksi internet untuk membuka halaman web), tetapi merupakan alat yang sangat berguna dan referensi untuk perintah cmd:

Indeks AZ dari baris perintah CMD Windows.

Diogo
sumber
Ini berguna, tapi bukan itu yang saya cari. Bagaimanapun, terima kasih.
amiregelz
@amiregelz ini adalah solusi offline jika Anda mengunduhnya misalnya dengan wget.
barlop
3

Saya tahu itu bukan apa yang Anda minta, tetapi Anda mungkin ingin mulai belajar Powershell alih-alih command prompt. Microsoft sedang mencoba untuk menghapus command prompt untuk Powershell sehingga itu akan menjadi keterampilan yang baik untuk dipelajari.

Jika Anda berada di Powershell, perintah Get-Commandakan mencantumkan semua perintah yang saat ini dapat dijalankan dari semua modul yang dimuat. Ini akan menghasilkan output yang terlihat seperti ini:

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
sumber