1. 程式人生 > >BAT常用命令

BAT常用命令

寫入 區分 等號 錯誤報告 為我 命令執行 hlist echo命令 link

1、@
它的作用是隱藏它後面這一行的命令本身(只能影響當前行)。
2、echo
中 文為“反饋”、“回顯”的意思。它其實是一個開關命令,就是說它只有兩種狀態:打開和關閉。於是就有了echo on和echo off兩個命令了。直接執行echo命令將顯示當前echo命令狀態(off或on)執行echo off將關閉回顯,它後面的所有命令都不顯示命令本身,只顯示執行後的結果。
echo. :輸出空行,即相當於輸入一個回車;值得註意的是命令行中的“.”要緊跟在ECHO後面中間不能有空格,否則“.”將被當作提示信息輸出到屏幕。另外“.”可以用,:;”/[\]+等任一符號替代。


3、start 命令
調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。
start /wait :
start命令會啟動軟件的安裝程序,而/wait命令會讓系統在處理批處理文件中的下一條命令之前等待前一個軟件安裝完成。使用/wait命令是很重要的,只有這樣才不會讓批處理文件中的所有命令一下子全部執行起來,那樣將會導致同一時間運行多個軟件的安裝程序。
如:幾秒鐘讓你的內存耗盡(例一):
@Echo off
Start
cmd:開啟CMD程序)
%0
4、pause
中文為“暫停”的意思。它的作用,是讓當前程序進程暫停一下,並顯示一行信息:請按任意鍵繼續. . .。我們可以加 >nul把這個信息隱藏。
5、:和goto
為什麽要把這兩個命令聯合起來介紹?因為它們是分不開的,無論少了哪個或多了哪個都會出錯。goto是個跳轉命令,:是一個標簽。當程序運行到goto時,將自動跳轉到:定義的部分去執行了。如:為你的右鍵添加P處理(例二)
@echo off
echo 輸入 1 後按回車鍵, 添加右鍵P處理
echo 輸入 2 後按回車鍵, 退出
echo.
set /p start=請選擇 (1、2) 後按回車鍵:
if "%start%"=="1" goto 1
if "%start%"=="2" goto 2
:1
@echo off
color 1a
reg add HKCR\.bat\ShellNew /v nullfile /f >nul
reg add HKCR\batfile /ve /d P處理 /f >nul
exit
:2
Exit
6、%
這個百分號嚴格來說是算不上命令的,它只是批處理中的參數。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0有兩個意義
一是表示批處理命令本身,還一個就是無限循環,其它參數字符串用%1到%9順序表示。
如:
%0表示批處理命令本身
新建一個1.BAT文件。輸入以下內容:
@echo off
del
%0
pause
大家看效果,1.BAT已經被刪除了。
還一個意思無限循環!如例一。無限執行start cmd 這條命令!
%1、%2……的意思:
例:@echo off
echo %1 %2 %3
echo %1
echo %2
echo %3
進入CMD,輸入cd c:\
然後輸入 test.bat 我是第一個參數
我是第二個參數
我是第三個參數
註意中間的空格,我們會看到這樣的結果:
我是第一個參數
我是第二個參數
我是第三個參數
我是第一個參數
我是第二個參數
我是第三個參數
對比下代碼,%1就是我是第一個參數 %2就是我是第二個參數
還有一個%* 他是什麽呢?他的作用不是很大,只是返回參數而已,不過他是一次返回全部參數的值,不用在輸入%1 %2來確定一個個的
例子
@echo off
echo %*
同樣保存為test.bat 放到C盤
進入CMD,輸入cd c:\
然後輸入 test.bat 我是第一個參數
我是第二個參數
我是第三個參數
我是第四個參數
可以看到他一次把全部參數都顯示出來了
現在說自定義變量
故名思意,自定義變量就是由我們來給他賦予值的變量;要使用自定義變量就得使用set命令了,看例子.
@echo off
set var=我是值
echo %var%
pause
保存為BAT執行,我們會看到CMD裏返回一個 "我是值"
var為變量名,=號右邊的是要給變量的值
這就是最簡單的一種設置變量的方法了
如果我們想讓用戶手工輸入變量的值,而不是在代碼裏指定,可以用用set命令的/p參數
例子:
@echo off
set /p var=請輸入變量的值
echo %var%
pause
var變量名 =號右邊的是提示語,不是變量的值。變量的值由我們運行後自己用鍵盤輸入!
7、if
if命令是一個表示判斷的命令,根據得出的每一個結果,它都可以對應一個相應的操作。

(1)、輸入判斷

if "參數" == "字符串"  待執行的命令

  參數如果等於指定的字符串,則條件成立,運行命令,否則運行下一句。(註意是兩個等號)

  如if "%1"=="a" format a:
再如例二。

(2)、存在判斷。例:
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
如 果存在那些gif文件,就刪除這些文件。註意,這裏的條件判斷是判斷存在的,當然也可以判斷不存在的,例如下面這句“如果不存在那些gif文件則退出腳 本”:if not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一個not來表示否定而已。
(3)、結果判斷。例:
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
這種用法是先判斷前一個命令執行後的返回碼(也叫錯誤碼,DOS程序在運行完後都有返回碼),如果和定義的錯誤碼符合(這裏定義的錯誤碼為1),則執行相應的操作(這裏相應的操作為pause & edit %1.asm部分)。
8、call
在批處理腳本中,call命令用來從一個批處理腳本中調用另一個批處理腳本。
9、find
這是一個搜索命令,用來在文件中搜索特定字符串,通常也作為條件判斷的鋪墊程序。這個命令單獨使用的情況在批處理中是比較少見的,因為沒什麽實際意義。
下例中,如果不使用type命令列出a.txt中的內容,而是直接使用find命令在a.txt中找“8000”,就必須得給出這個a.txt的絕對路徑,如果沒有指定路徑,find將搜索鍵入的或者由另一個命令產生的文字。這裏的“另一個命令”指的就是type命令了。
@echo off
cd\
netstat -an > a.txt
type a.txt | find "8000" && echo "Congratulations! You have infected 灰鴿子!"
del a.txt
pause & exit

10、for

循環命令,只要條件符合,它將多次執行同一命令。
語法:FOR %%variable IN (set) DO command [command-parameters]
對一組文件中的每一個文件執行某個特定命令。
%%variable 指定一個單一字母可替換的參數。 (set) 指定一個或一組文件。可以使用通配符。
command
指定對每個文件執行的命令。

command-parameters
為特定命令指定參數或命令行開關。
例如一個批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
則該命令行會顯示當前目錄下所有以bat和txt為擴展名的文件的內容。

FOR %%a IN ( C: D: E: F: G: H: ) DO ATTRIB -R -H -S %%a\SXS.EXE & DEL /F /Q /A -R -H -S %%a\SXS.EXE & ATTRIB -R -H -S %%a\AUTORUN.INF & DEL /F /Q /A -R -H -S %%a\AUTORUN.INF

該命令刪除根目錄下所有SXS.EXE和AUTORUN.INF文件.

 在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable 而不要用 %variable。直接在命令行則只需要一個%號。變量名稱是區分大小寫的,所以 %i 不同於 %I

11、SET

顯示、設置或刪除 cmd.exe 環境變量。 

要顯示當前環境變量,鍵入不帶參數的 SET。

/P 命令行開關允許將變量數值設成用戶輸入的一行輸入。讀取輸入行之前,顯示指定的 promptString。promptString 可以是空的。

/A 命令行開關指定等號右邊的字符串為被評估的數字表達式。該表達式評估器很簡單並以遞減的優先權順序操作。

如: set /p start=請選擇 (1、2、3) 後按回車鍵:

if "%start%"=="1" goto 1

if "%start%"=="2" goto 2

if "%start%"=="3" goto 3
管道命令:
1、|
它的作用,就是把前一命令執行的結果傳到後一命令去處理。
如:help | more
回車後會發現顯示滿一屏幕後就自動暫停,等候繼續顯示其他信息。當按寫回車時,變成一個一個的出現;按下空格鍵時一屏幕一屏幕顯示,直到全部顯示完為止;按其他鍵自動停止返回DOS。
這裏結合了管道命令|和DOS命令more來共同達到目的的。
2、>、>>
這 兩個命令的效果從本質上來說都是一樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一個文件中。這兩個命令的唯一區別 是,>會清除掉原有文件中的內容後把新的內容寫入原文件,而>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容。
3、<
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
例:sort < list.txt > alphlist.txt
sort 命令按字母順序排列文本文件或命令的輸出。在此範例中,sort 命令對 List.txt 文件的行進行排序並顯示結果,但不更改文件。並將結果存到 Alphlist.txt 文件中。
組合命令:
顧名思義,就是可以把多個命令組合起來當一個命令來執行。這在批處理腳本裏是允許的,而且用的非常廣泛。它的格式很簡單----既然現在已經成了一個文件了,那麽這多個命令就要用這些組合命令連接起來放在同一行----因為批處理認行不認命令數目。
1、&
這可以說是最簡單的一個組合命令了,它的作用是用來連接n個DOS命令,並把這些命令按順序執行,而不管是否有命令執行失敗。如:copy a.txt b.txt /y & del a.txt
2、&&
這 個命令可以把它前後兩個命令組合起來當一個命令來用,與&命令不同之處在於,它在從前往後依次執行被它連接的幾個命令時會自動判斷是否有某個命令 執行出錯,一旦發現出錯後將不繼續執行後面剩下的命令。這就為我們自動化完成一些任務提供了方便。(當然這個和IF命令差不多,可以自己選擇喜歡的方式)
小提示:有些命令是不能同時執行的
如:出道題:把C盤和D盤的文件和文件夾列出到a.txt文件中。
有人說,同時執行兩個dir,然後把得到的結果>到a.txt裏就ok了嘛:
dir c:\ && dir d:\ > a.txt
錯 了!這樣執行後a.txt裏只有D盤的信息!為什麽?就因為這裏&&命令和>命令不能同時出現一個句子裏(批處理把一行看成一個句 子)!!組合命令&&的優先級沒有管道命令>的優先級高!所以這句在執行時將本分成這兩部分:dir c:\和dir d:\ > a.txt,而並不是如你想的這兩部分:dir c:\ && dir d:\和> a.txt。要使用組合命令&&達到題目的要求,必須得這麽寫:
dir c:\ > a.txt && dir d:\ >> a.txt
當然這裏還可以利用&命令:dir c:\ > a.txt & dir d:\ >> a.txt
3、||
這個命令的用法和&&幾乎一樣,但作用剛好和它相反:利用這種方法在執行多條命令時,當遇到一個執行正確的命令就退出此命令組合,不再繼續執行下面的命令。
題目:查看當前目錄下是否有以s開頭的exe文件,如果有則退出。例:
@echo off
dir s*.exe || exit
其 實這個例子是有破綻的,如果存在那個exe文件,就退出;如果不存在那個exe文件,也退出!為什麽?因為如果不存在那個.exe文件,則前一條命令 dir s*.exe執行肯定是不成功的,所以就繼續執行exit,自然就退出了。那麽如何解決題目給出的問題呢?看下例:
@echo off
dir s*.exe || echo Didn‘t exist file s*.exe & pause & exit
這樣執行的結果,就能達到題目的要求,是否存在s*.exe將出現兩種結果。這裏加暫停的意思,當然是讓你能看到echo輸出的內容,否則一閃而過的窗口,echo就白寫了。
幾個符號:
1、符號(" ")
  " "符號允許在字符串中包含空格。進入一個特殊的目錄可以用如下方法.例:
c:\>cd "Program Files"
c:\>cd progra~1
c:\>cd pro*
  以上方法都可以進入Program Files目錄
2、符號(,)
  ,符號相當於空格。在某些特殊的情況下可以用,來代替空格使用。例:
c:\>dir,c:\
3、符號(;)
  ;符號當命令相同的時候可以將不同的目標用;隔離開來但執行效果不變。如執行過程中發生錯誤則只返回錯誤報告但程序還是會繼續執行。例:DIR C:\;D:\;E:\F:\
以上的命令相當於
DIR C:\
DIR D:\
DIR E:\
DIR F:\
4、符號“::”
這個符號的作用很簡單,它是註釋命令,在批處理腳本中和rem命令等效。它後面的內容在執行時不顯示,也不起任何作用,因為它只是註釋,只是增加了腳本的可讀性。與rem 不同的是, ::後的字符行在執行時不會回顯,無論是否用echo on打開命令行回顯狀態。
5、符合“^”
^是對特殊符號"<",">","&"的前導字符,在命令中他將以上3個符號的特殊功能去掉,僅僅只把他們當成符號而不使用他們的特殊意義。
比如echo test ^>1.txt
結果則是他沒有追加在1.txt裏,只是顯示了出來

BAT常用命令