1. 程式人生 > 程式設計 >cmd組合和管道命令的使用方法(命令組合)

cmd組合和管道命令的使用方法(命令組合)

1.&

Usage:第一條命令 & 第二條命令 [& 第三條命令...]
用這種方法可以同時執行多條命令,而不管命令是否執行成功

Sample:
C:/>dir z: & dir c:/Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2020-03-13 23:51 .
2020-03-13 23:51 ..
2020-03-13 23:51 14 sometips.gif

2.&&

Usage:第一條命令 && 第二條命令 [&& 第三條命令...]
用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則
一直執行完所有命令;

Sample:
C:/>dir z: && dir c:/Ex4rch
The system cannot find the path specified.

C:/>dir c:/Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:/Ex4rch

2002-05-14 23:55 .
2002-05-14 23:55 ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.

在做備份的時候可能會用到這種命令會比較簡單,如:
dir file&://192.168.0.1/database/backup.mdb && copy file&://192.168.0.1/database/backup.mdb

E:/backup
如果遠端伺服器上存在backup.mdb檔案,就執行copy命令,若不存在該檔案則不執行copy命令。這種用法

可以替換IF exist了.

3.||

Usage:第一條命令 || 第二條命令 [|| 第三條命令...]
用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的
命令則一直執行完所有命令;

Sample:
C:/Ex4rch>dir sometips.gif ││ del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of C:/Ex4rch

2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free

組合命令使用的例子:

sample:
@copy trojan.exe //%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3

>>victim.txt

管道命令的使用

1.|管道命令

Usage:第一條命令 | 第二條命令 [| 第三條命令...]
將第一條命令的結果作為第二條命令的引數來使用,記得在unix中這種方式很常見。

time /t>>D://IP.log
netstat -n -p tcp|find ":3389">>D://IP.log
start Explorer

看出來了麼?用於終端服務允許我們為使用者自定義起始的程式,來實現讓使用者執行下面這個bat,以獲得登入使用者的IP。

2.>,>>輸出重定向命令
將一條命令或某個程式輸出結果的重定向到特定檔案中,> 與 >>的區別在於,>會清除調原有檔案中的內
容後寫入指定檔案,而>>只會追加內容到指定檔案中,而不會改動其中的內容。

sample1:

echo hello world>c://hello.txt (stupid example?)

sample2:

時下DLL木馬盛行,我們知道system32是個捉迷藏的好地方,許多木馬都削尖了腦袋往那裡鑽,DLL馬也不例外,針對這一點我們可以在安裝好系統和必要的應用程式後,對該目錄下的EXE和DLL檔案作一個記錄:執行CMD--轉換目錄到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,這樣所有的EXE和DLL檔案的名稱都被分別記錄到exeback.txt和dllback.txt中,日後如發現異常但用傳統的方法查不出問題時,則要考慮是不是系統中已經潛入DLL木馬了.這時我們用同樣的命令將system32下的EXE和DLL檔案記錄到另外的exeback1.txt和dllback1.txt中,然後執行:

CMD fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.

(用FC命令比較前後兩次的DLL和EXE檔案,並將結果輸入到diff.txt中),這樣我們就能發現一些多出來的DLL和EXE檔案,然後通過檢視建立時間、版本、是否經過壓縮等就能夠比較容易地判斷出是不是已經被DLL木馬光顧了。沒有是最好,如果有的話也不要直接DEL掉,先用regsvr32 /u trojan.dll將後門DLL檔案登出掉,再把它移到回收站裡,若系統沒有異常反映再將之徹底刪除或者提交給防毒軟體公司。

3.<,>&,<&

< 從檔案中而不是從鍵盤中讀入命令輸入。
>& 將一個控制代碼的輸出寫入到另一個控制代碼的輸入中。
<& 從一個控制代碼讀取輸入並將其寫入到另一個控制代碼輸出中。

使用命令重定向操作符可以使用重定向操作符將命令輸入和輸出資料流從預設位置重定向到其他位置。輸入或輸出資料流的位置稱為控制代碼。

下表將列出可用的控制代碼。

控制代碼 控制代碼的數字代號 描述
STDIN 0 鍵盤輸入
STDOUT 1 輸出到命令提示符視窗
STDERR 2 錯誤輸出到命令提示符視窗
UNDEFINED 3-9 這些控制代碼由應用程式單獨定義,並且是各個工具特定的。

數字 0 到 9 代表前 10 個控制代碼。
可以使用命令 Cmd.exe 執行程式並將該程式前 10 個控制代碼中的任何一個重定向。要指定想使用的控制代碼,可在重定向操作符前面鍵入該控制代碼的數字。如果未定義控制代碼,則預設的 < 重定向輸入操作符是 0,而預設的 > 重定向輸出操作符是 1。鍵入 > 或 < 操作符之後,必須指定要讀取或寫入資料的位置。可以指定檔名或另一個現有的控制代碼。

要指定重定向到現有控制代碼,請使用與 (&) 字元,後面接要重定向的控制代碼號(例如 &控制代碼#)。例如,下面的命令可以將控制代碼 2(即 STDERR)重定向到控制代碼 1(即 STDOUT):

2>&1

下表列出了可用於將輸入和輸出資料流進行重定向的操作符。

重定向操作符 描述
> 將命令輸出寫入到檔案或裝置(例如印表機)中,而不是寫在命令提示符視窗或控制代碼中。
< 從檔案中而不是從鍵盤或控制代碼中讀入命令輸入。
>> 將命令輸出新增到檔案末尾而不刪除檔案中的資訊。
>& 將一個控制代碼的輸出寫入到另一個控制代碼的輸入中。
<& 從一個控制代碼讀取輸入並將其寫入到另一個控制代碼輸出中。
| 從一個命令中讀取輸出並將其寫入另一個命令的輸入中。也稱作管道。

預設情況下,可以從鍵盤將命令輸入(即 STDIN 控制代碼)傳送到 Cmd.exe,然後由 Cmd.exe 將命令輸出(即 STDOUT 控制代碼)傳送到命令提示符視窗。

重定向輸入 (<)
要將鍵盤輸入重定向到檔案或裝置,請使用 < 操作符。例如,要從 File.txt 獲取 sort 命令的輸入,請鍵入:

sort<file.txt

File.txt 的內容將以字母順序列表的方式顯示在命令提示符視窗中。

< 操作符可以開啟具有隻讀訪問的指定檔名。所以,不能使用該操作符向檔案中寫入資訊。例如,如果以 <&2 啟動程式,則所有試圖讀取控制代碼 0 的操作都將失敗,因為控制代碼 2 最初是以只寫訪問開啟的。

注意

0 是 < 重定向輸入操作符的預設控制代碼。

重定向輸出 (>)
幾乎所有的命令都將輸出傳送到命令提示符視窗。即使將輸出傳送到驅動器或印表機的命令也會在命令提示符視窗顯示訊息和提示。

要將輸出從命令提示符視窗重定向到檔案或裝置,請使用 > 操作符。可以在許多命令中使用該操作符。例如,要將 dir 輸出重定向到 Dirlist.txt,請鍵入:

dir>dirlist.txt

如果 Dirlist.txt 不存在,Cmd.exe 將建立該檔案。如果 Dirlist.txt 存在,Cmd.exe 將使用 dir 命令的輸出替換檔案中的資訊。

要執行 netsh routing dump 命令,然後將輸出傳送到 Route.cfg,請鍵入:

netsh routing dump>c:\route.cfg

> 操作符可以開啟具有隻寫訪問屬性的指定檔案。所以,不能使用該操作符讀取檔案。例如,如果使用重定向 >&0 啟動程式,則所有試圖寫入控制代碼 1 的操作都將失敗,因為控制代碼 0 最初是以只讀訪問開啟的。

注意

1 是 > 重定向輸出操作符的預設控制代碼。

複製控制代碼
重定向操作符 & 可以將輸出或輸入從一個指定控制代碼複製到另一個指定的控制代碼。例如,要將 dir 輸出傳送到 File.txt 並將錯誤輸出傳送到 File.txt,請鍵入:

dir>c:\file.txt 2>&1

複製控制代碼時,可以複製該控制代碼原狀態的所有特性。例如,如果一個控制代碼具有隻寫訪問的屬性,則該控制代碼的所有副本都具有隻寫訪問屬性。不能將一個具有隻讀訪問屬性的控制代碼複製到另一個具有隻寫訪問屬性的控制代碼。

使用 & 操作符重定向輸入和副本
要將重定向輸入操作符 (<) 與複製操作符 (&) 一起使用,指定的檔案必須已經存在。如果輸入檔案存在,Cmd.exe 將以只讀方式開啟該檔案,然後將檔案中包含的字元作為輸入傳送到此命令(如同從鍵盤輸入一樣)。如果指定了控制代碼,Cmd.exe 將指定的控制代碼複製到系統現有的控制代碼中。

例如,要以控制代碼 0 輸入讀取(即 STDIN)的方式開啟 File.txt,請鍵入:

<file.txt

要開啟 File.txt,並在內容排序後將輸出傳送到命令提示符視窗(即 STDOUT),請鍵入:

sort<file.txt

要查詢 File.txt,然後將控制代碼 1(即 STDOUT)和控制代碼 2(即 STDERR)重定向到 Search.txt,請鍵入:

findfile file.txt>search.txt 2<&1

要以控制代碼 0 輸入讀取(即 STDIN)的方式複製使用者定義控制代碼 3,請鍵入:

<&3

使用 & 操作符重定向輸出和複製
如果將輸出重定向到檔案且指定了現有的檔名,Cmd.exe 將以只寫方式開啟檔案並覆蓋該檔案內容。如果指定了控制代碼,Cmd.exe 將檔案複製到現有控制代碼中。

要將使用者定義控制代碼 3 複製到控制代碼 1,請鍵入:

>&3

要將包括控制代碼 2(即 STDERR)的所有輸出從 ipconfig 命令重定向到控制代碼 1(即 STDOUT),然後將輸出重定向到 Output.log,請鍵入:

ipconfig.exe>>output.log 2>&1

使用 >> 重定向操作符追加輸出
要從命令中將輸出新增到檔案末尾而不丟失檔案中已存在的任何資訊,請使用兩個連續的大於號(即 >>)。例如,下面的命令可以將由 dir 命令生成的目錄列表追加到 Dirlist.txt 檔案:

dir>>dirlist.txt

要將 netstat 命令的輸出追加到 Tcpinfo.txt 的末尾,請鍵入:

netstat>>tcpinfo.txt

使用管道操作符 (|)
管道操作符 (|) 可以提取一個命令的輸出(預設情況下是 STDOUT),然後將其匯入另一個命令的輸入中(預設情況下是 STDIN)。例如,下面的命令將對目錄分類:

dir | sort

在本例中,將同時啟動兩個命令,但隨後 sort 命令會暫停,直到它接收到 dir 命令的輸出為止。sort 命令使用 dir 命令的輸出作為輸入,然後將輸出傳送到控制代碼 1(即 STDOUT)。

合併帶重定向操作符的命令
可以通過合併帶有其他命令和檔名的篩選器命令建立自定義命令。例如,可以使用以下命令儲存包含“LOG”字串的檔名:

dir /b | find "LOG" > loglist.txt

dir 命令的輸出通過 find 篩選器命令傳送。包含字串 "LOG" 的檔名作為檔名列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)儲存在檔案 Loglist.txt 中。

要在相同命令中使用多個篩選器,請使用管道 (|) 分隔篩選器。例如,下面的命令將搜尋 C 盤上的每個目錄以查詢包含 "LOG" 字串的檔名,並且在命令提示符視窗中每次顯示一屏:

dir c:\ /s /b | find "LOG" | more

利用管道 (|) 可以將 Cmd.exe 導向為通過 find 篩選器命令傳送 dir 命令輸出。find 命令只選擇包含字串 "LOG" 的檔名。more 命令可以顯示由 find 命令選擇的檔名(在命令提示符視窗中每次顯示一屏)。有關篩選器命令的詳細資訊,請參閱使用篩選器。

談談重定向、管道與C

我所知道的重定向和管道就這些了,寫了一早晨終於寫完了,現在接著睡,希望對大家有用。
這是我學習之中知道的一些關於重定向和管道的知識,並積累的資料,在這裡和大家分享。如果說的有不足和錯誤的地方,請指出。畢竟是交流資訊。我這裡是從DOS和C語言方面看它,沒有太多涉及LINUX中所說的。我想從以下幾個方面敘述:

一、 重定向:

所謂重定向,就是不使用系統的標準輸入埠、標準輸出埠或標準錯誤埠,而進行重新的指定,所以重定向分為輸出重定向、輸入重定向和錯誤重定向(注:
STDIN 0 標準輸入 鍵盤 命令在執行時所要的輸入資料通過它來取得
STDOUT 1 標準輸出 顯示器 命令執行後的輸出結果從該埠送出
STDERR 2 標準錯誤 顯示器 命令執行時的錯誤資訊通過該埠送出 )。
通常情況下重定向到一個檔案。重定向命令又稱轉向命令。其中錯誤重定向和輸出重定向有些類似,就不多說,學過C++可能會明白的多些。
所 謂輸出重定向指把執行相應DOS命令時本應在螢幕上顯示的內容輸出到重定向命令所指向的檔案或裝置中去。輸出重定向命令 > 、>>。它們的區別是:如果你使用的是 > ,原檔案會被刪除,重新生成新的檔案,其內容如上所述;如果你使用的是 >> ,它以追加的方式,將命令的輸出寫入檔案的末尾,原檔案內容會被保留,新的內容會新增到原檔案件的內容的後面。主要用在某個命令的輸出很多,在螢幕上不能 完全顯示,就可把它重定向到一個檔案中,稍後再用文字編輯器來開啟這個檔案。
輸入重定向使輸入資訊來自檔案。如果一個名為file.com的檔案 C:>file 之後,執行file時所需的處理資訊就改為由檔案file讀入,這就是輸入重定向。小於號<是輸入重定向操作符,在<之後的檔名或裝置名是 重定向的輸入源。如果一個程式時需要輸入較多資料,使用輸入重定向可以提高效率。在這裡要說一些過濾命令 more 、sort 和 find 。其中more進行分屏顯示;find 查詢符合條件的內容;sort(按行)排序。

例如:(我是在windows命令提示符中用的)

例1: 

more < f:\turboc2\readme

more的輸入來自 c:\tc\readme 檔案內容多。這個命令與

type f:\turboc2\readme | more

作用相同,但更簡潔,效率也更高。
例2:(注cmd重定向進入後用exit返回原目錄)

cmd > file 把 stdout 重定向到 file 檔案中
cmd >> file 把 stdout 重定向到 file 檔案中(追加)
cmd 1> file 把 stdout 重定向到 file 檔案中
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中
cmd 2> file 把 stderr 重定向到 file 檔案中
cmd 2>> file 把 stderr 重定向到 file 檔案中(追加)
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 檔案中
cmd < file >file2 cmd 命令以 file 檔案作為 stdin,以 file2 檔案作為 stdout

注:>&n 使用系統複製檔案描述符 n 並把結果用作標準輸出
<&n 標準輸入複製自檔案描述符 n
<&- 關閉標準輸入(鍵盤)
>&- 關閉標準輸出
n<&- 表示將 n 號輸入關閉
n>&- 表示將 n 號輸出關閉
&> 同時實現輸出重定向和錯誤重定向

用 途:DOS的標準輸入輸出通常是在標準裝置鍵盤和顯示器上進行的,利用重定向,可以方便地將輸入輸出改向磁碟檔案或其它裝置。如在批處理命令執行期間為了禁止命令或程式執行後輸出資訊而擾亂螢幕,可用DOS重定向功能把輸出改向NUL裝置(NUL不指向任何實際裝置): C:\>copy a.txt b.txt > NUL。命令執行結束不顯示"1 file(s) copied"的資訊。有的互動程式在執行時要求很多鍵盤輸入,但有時輸入是固定不變的,為加快執行速度,可預先建立一個輸入檔案,此檔案的內容為程式的鍵盤輸入項,每個輸入項佔一行。假如有一個程式cx 其輸入項全部包括在檔案in.dat中,執行 C:\>cx <in.dat>NUL 程式就自動執行。

二、 管道:

進 程從“管道”的一端傳送另一端接收,也就是說將若干命令用輸入輸出“管道”串接在一起,這就是管道;管道在某種程度上是輸入和輸出重定向的結合,前一個命 令的輸出,作為下一個命令的輸入,而不需要經過任何中間檔案。豎線字元“|”是管道操作符,管道命令經常與上面講的過濾命令聯合使用。DOS的管道功能是 使一個程式或命令的標準輸出用做另一個程式或命令的標準輸入。如把DEBUG的輸入命令寫入檔案aaa,用type命令通過管道功能將aaa的內容傳輸給DEBUG,在DEBUG執行期間不再從控制檯索取命令引數,從而提高了機器效率。

命令為: C:\>type aaa|DEBUG >bbb。

例如,這是我以前看到的例子。命令dir|more使得當前目錄列表在螢幕上逐屏 顯示。dir的輸出是整個目錄列表,它不出現在螢幕上而是由於符號“|”的規定,成為下一個命令more的輸入,more命令則將其輸入,more命令則 將其輸入一屏一屏地顯示,成為命令列的輸出。再如命令dir|find”hello”>file,其中 dir的輸出是當前目錄列表,不出現在螢幕上而是成為find命令的輸入。find命令在輸入檔案中尋找指定字串"hello"並輸出包含這個字串的 行,由於輸出重定向符號>的規定,最後的輸出已存入檔案file,不出現在螢幕上。命令dir|find"< dir >file則是將當前目錄項中的子目錄項尋找出來並存入檔案file中。

變數 型別 描述
%ALLUSERSPROFILE% 區域性 返回“所有使用者配置檔案”的位置。
%APPDATA% 區域性 返回預設情況下應用程式儲存資料的位置。
%CD% 區域性 返回當前目錄字串。
%CMDCMDLINE% 區域性 返回用來啟動當前的 Cmd.exe 的準確命令列。
%CMDEXTVERSION% 系統 返回當前的“命令處理程式擴充套件”的版本號。
%COMPUTERNAME% 系統 返回計算機的名稱。
%COMSPEC% 系統 返回命令列直譯器可執行程式的準確路徑。
%DATE% 系統 返回當前日期。使用與date /t命令相同的格式。由 Cmd.exe 生成。有關 date 命令的詳細資訊,請參閱 Date。
%ERRORLEVEL% 系統 返回上一條命令的錯誤程式碼。通常用非零值表示錯誤。
%HOMEDRIVE% 系統 返回連線到使用者主目錄的本地工作站驅動器號。基於主目錄值而設定。使用者主目錄是在“本地使用者和組”中指定的。
%HOMEPATH% 系統 返回使用者主目錄的完整路徑。基於主目錄值而設定。使用者主目錄是在“本地使用者和組”中指定的。
%HOMESHARE% 系統 返回使用者的共享主目錄的網路路徑。基於主目錄值而設定。使用者主目錄是在“本地使用者和組”中指定的。
%LOGONSERVER% 區域性 返回驗證當前登入會話的域控制器的名稱。
%NUMBER_OF_PROCESSORS% 系統 指定安裝在計算機上的處理器的數目。
%OS% 系統 返回作業系統名稱。Windows 2000 會將該作業系統顯示為 Windows NT。
%PATH% 系統 指定可執行檔案的搜尋路徑。
%PATHEXT% 系統 返回作業系統認為可執行的副檔名的列表。
%PROCESSOR_ARCHITECTURE% 系統 返回處理器的晶片體系結構。值:x86 或 IA64(基於 Itanium)。
%PROCESSOR_IDENTFIER% 系統 返回處理器說明。
%PROCESSOR_LEVEL% 系統 返回計算機上安裝的處理器的型號。
%PROCESSOR_REVISION% 系統 返回處理器的版本號。
%PROMPT% 區域性 返回當前解釋程式的命令提示符設定。由 Cmd.exe 生成。
%RANDOM% 系統 返回 0 到 32767 之間的任意十進位制數字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系統 返回包含 Windows 伺服器作業系統根目錄(即系統根目錄)的驅動器。
%SYSTEMROOT% 系統 返回 Windows 伺服器作業系統目錄的位置。
%TEMP% 和 %TMP% 系統和使用者 返回對當前登入使用者可用的應用程式所使用的預設臨時目錄。有些應用程式需要 TEMP,而其他應用程式則需要 TMP。
%TIME% 系統 返回當前時間。使用與 time /t 命令相同的格式。由 Cmd.exe 生成。有關 time 命令的詳細資訊,請參閱 Time。
%USERDOMAIN% 區域性 返回包含使用者帳戶的域的名稱。
%USERNAME% 區域性 返回當前登入的使用者的名稱。
%USERPROFILE% 區域性 返回當前使用者的配置檔案的位置。
%WINDIR% 系統 返回作業系統目錄的位置。

到此這篇關於cmd組合和管道命令的使用方法(命令組合)的文章就介紹到這了,更多相關dos組合與管道命令用法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!