BAT經常使用命令

基本命令php

0.remhtml

  表示當前行是註釋瀏覽器

一、@
它的做用是隱藏它後面這一行的命令自己(只能影響當前行)。eclipse

二、echo
中 文爲「反饋」、「回顯」的意思。它實際上是一個開關命令,就是說它只有兩種狀態:打開和關閉。因而就有了echo on和echo off兩個命令了。直接執行echo命令將顯示當前echo命令狀態(off或on)執行echo off將關閉回顯,它後面的全部命令都不顯示命令自己,只顯示執行後的結果。
echo. :輸出空行,即至關於輸入一個回車;值得注意的是命令行中的「.」要緊跟在ECHO後面中間不能有空格,不然「.」將被看成提示信息輸出到屏幕。另外「.」能夠用,:;」/[\]+等任一符號替代。post

 

有時候%須要前面加一個%進行轉義,參考:http://www.javashuo.com/article/p-fpqpavle-hq.htmlui



三、start 命令
調用外部程序,全部的DOS命令和命令行程序均可以由start命令來調用。
start /wait :
start命令會啓動軟件的安裝程序,而/wait命令會讓系統在處理批處理文件中的下一條命令以前等待前一個軟件安裝完成。使用/wait命令是很重要的,只有這樣纔不會讓批處理文件中的全部命令一會兒所有執行起來,那樣將會致使同一時間運行多個軟件的安裝程序。
如:幾秒鐘讓你的內存耗盡(例一):
@Echo off
Start
cmd:開啓CMD程序)
%0spa


四、pause
中文爲「暫停」的意思。它的做用,是讓當前程序進程暫停一下,並顯示一行信息:請按任意鍵繼續. . .。咱們能夠加 >nul把這個信息隱藏。.net

五、:和goto
爲何要把這兩個命令聯合起來介紹?由於它們是分不開的,不管少了哪一個或多了哪一個都會出錯。goto是個跳轉命令,:是一個標籤。當程序運行到goto時,將自動跳轉到:定義的部分去執行了。如:爲你的右鍵添加P處理(例二)
@echo off
echo 輸入 1 後按回車鍵, 添加右鍵P處理
echo 輸入 2 後按回車鍵, 退出
echo.
set /p start=請選擇 (一、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
Exitfirefox

六、%(%[1-9]表示參數      %varname%表示取變量的名字)
這個百分號嚴格來講是算不上命令的,它只是批處理中的參數。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量能夠從%0到%9,%0有兩個意義
一是表示批處理命令自己,還一個就是無限循環,其它參數字符串用%1到%9順序表示。
如:
%0表示批處理命令自己
新建一個1.BAT文件。輸入如下內容:
@echo off
del
%0
pause
你們看效果,1.BAT已經被刪除了。
還一個意思無限循環!如例一。無限執行start cmd 這條命令!
%一、%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變量名   =號右邊的是提示語,不是變量的值。變量的值由咱們運行後本身用鍵盤輸入!命令行

七、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部分)。

八、call
在批處理腳本中,call命令用來從一個批處理腳本中調用另外一個批處理腳本。

 

九、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

十、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

十一、SET

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

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

 

cmd命令的變量類型只有字符串,因此不加雙引號。若是變量值是數字,能夠直接當數字使用。
須要使用雙引號的狀況是變量的值中有雙引號或者特殊字符。
C:\Users\liqiang>set a="wwwwwww"

C:\Users\liqiang>echo %a%
"wwwwwww"

C:\Users\liqiang>set "a=wwwwwww"

C:\Users\liqiang>echo %a%
wwwwwww

C:\Users\liqiang>set "a=EEE\\   //EEE"

C:\Users\liqiang>echo %a%
EEE\\   //EEE

 



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

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

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

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

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

if "%start%"=="3" goto 3

 

 

 


管道命令:
一、|
它的做用,就是把前一命令執行的結果傳到後一命令去處理。
如:help | more
回車後會發現顯示滿一屏幕後就自動暫停,等候繼續顯示其餘信息。當按寫回車時,變成一個一個的出現;按下空格鍵時一屏幕一屏幕顯示,直到所有顯示完爲止;按其餘鍵自動中止返回DOS。
這裏結合了管道命令|和DOS命令more來共同達到目的的。
二、>、>>
這 兩個命令的效果從本質上來講都是同樣的,他們都是輸出重定向命令,說的通俗一點,就是把前面命令的輸出寫入到一個文件中。這兩個命令的惟一區別 是,>會清除掉原有文件中的內容後把新的內容寫入原文件,而>>只會另起一行追加新的內容到原文件中,而不會改動其中的原有內容。
三、<
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
例:sort < list.txt > alphlist.txt
sort 命令按字母順序排列文本文件或命令的輸出。在此範例中,sort 命令對 List.txt 文件的行進行排序並顯示結果,但不更改文件。並將結果存到 Alphlist.txt 文件中。

 

組合命令:

顧名思義,就是能夠把多個命令組合起來當一個命令來執行。這在批處理腳本里是容許的,並且用的很是普遍。它的格式很簡單----既然如今已經成了一個文件了,那麼這多個命令就要用這些組合命令鏈接起來放在同一行----由於批處理認行不認命令數目。
一、&
這能夠說是最簡單的一個組合命令了,它的做用是用來鏈接n個DOS命令,並把這些命令按順序執行,而無論是否有命令執行失敗。如:copy a.txt b.txt /y & del a.txt
二、&&
這 個命令能夠把它先後兩個命令組合起來當一個命令來用,與&命令不一樣之處在於,它在從前日後依次執行被它鏈接的幾個命令時會自動判斷是否有某個命令 執行出錯,一旦發現出錯後將不繼續執行後面剩下的命令。這就爲咱們自動化完成一些任務提供了方便。(固然這個和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
三、||
這個命令的用法和&&幾乎同樣,但做用恰好和它相反:利用這種方法在執行多條命令時,當遇到一個執行正確的命令就退出此命令組合,再也不繼續執行下面的命令。
題目:查看當前目錄下是否有以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就白寫了。

 

幾個符號:
一、符號(" ")
  " "符號容許在字符串中包含空格。進入一個特殊的目錄能夠用以下方法.例:
c:\>cd "Program Files"
c:\>cd progra~1
c:\>cd pro*
  以上方法均可以進入Program Files目錄
二、符號(,)
  ,符號至關於空格。在某些特殊的狀況下能夠用,來代替空格使用。例:
c:\>dir,c:\
三、符號(;)
  ;符號當命令相同的時候能夠將不一樣的目標用;隔離開來但執行效果不變。如執行過程當中發生錯誤則只返回錯誤報告但程序仍是會繼續執行。例:DIR C:\;D:\;E:\F:\
以上的命令至關於
DIR C:\
DIR D:\
DIR E:\
DIR F:\
四、符號「::」
這個符號的做用很簡單,它是註釋命令,在批處理腳本中和rem命令等效。它後面的內容在執行時不顯示,也不起任何做用,由於它只是註釋,只是增長了腳本的可讀性。與rem 不一樣的是, ::後的字符行在執行時不會回顯,不管是否用echo on打開命令行回顯狀態。
五、符合「^」
^是對特殊符號"<",">","&"的前導字符,在命令中他將以上3個符號的特殊功能去掉,僅僅只把他們當成符號而不使用他們的特殊意義。
好比echo test ^>1.txt
結果則是他沒有追加在1.txt裏,只是顯示了出來

 

 

 

附幾個本身的練習:

@Echo off
rem call start-server
start E:\酷狗\KGMusic\KuGou.exe
start E:\Eclipse\eclipse\eclipse.exe
start E:\hbuilder1\HBuilder\HBuilder.exe
rem 打開桌面上的eclipse,HBuilder,酷狗音樂。


E:
cd php\Test\第一個html
start 界面.html
rem 進入E盤打開本身設計的網頁


cd E:\program files (x86)\Bin
start QQ.exe
rem 進入E盤打開本身騰訊QQ
rem start E:\搜狗瀏覽器\SogouExplorer\SogouExplorer.exe
rem start E:\fire\firefox.exe
rem 這是註釋,echo off是之後的命令均不顯示,pause是暫停,等待用戶按鍵後繼續。用echo是在dos界面顯示字符
rem  cd desktop    


if exist 1.bat start 酷狗音樂
rem 這是註釋,echo off是之後的命令均不顯示,pause是暫停,等待用戶按鍵後繼續。用echo是在dos界面顯示字符。上面是若果存在1.bat就打開酷狗音樂
goto next
:next
echo 不存在名爲1.bat的文件
rem 調到goto指定的標號命令    :next表示標號


rem for %%c in (*.bat *.txt) do type %%c  
rem 讀取索要.bat文件

set var=我是變量
echo %var%
rem set設置變量,取變量時變量名先後都要加%


set var1=1122
set var1=%var1:11=22%
echo %var1%
rem 將變量var1中的11替換爲22

set var2=123456789
echo %var2:~0,5%
rem 這是從變量的從第一位開始,顯示以後的五位(%var:~1,5的用法)

set var=123456789
echo %var:~-5%
rem 這是從變量的最後五位顯示出來

set var3=123456789
set var3=%var:~3%
echo %var1%
rem 這是從變量的第四位開始的顯示出來

set var4=123456789
echo %var4:~,3% 
rem 這是從變量的從第0位開始,顯示以後的3位



rem set /p var=請輸入變量的值:
rem echo  %var% 
rem 請輸入變量是提示符,輸入的字符爲var變量的值

set var5=123456789
set/a var6=%var5%*2
echo %var1% 
rem  /a是變量能夠進行運算,變量var6=變量var5*2

set "CURRENT_DIR=%cd%"  
rem 將當前驅動器目錄賦值給變量CURRENT_DIR,%cd%是當前目錄的值



@ECHO  OFF  
ECHO.  

ECHO  The  first  parameter  is  %1
ECHO  The  second  parameter  is  %2
ECHO  The  third  parameter  is  %3  
rem 參數的使用,文件名是1.bat,在cmd中輸入1 2 3 4;%1就是取文件名後第一個字符,也就是2,依次類推%2是取文件名後第二個字符。

 

 

 

 

建立日期目錄的腳本:

@ECHO OFF
cd C:\Users\liqiang\Desktop
set name=%date:~0,10%
set name=%name:/=-%
mkdir %name%
pause
相關文章
相關標籤/搜索