bat批处理脚本语言(一)
批處理(Batch)通常被認(rèn)為是一種簡(jiǎn)化的腳本語(yǔ)言,擴(kuò)展名是.bat或者.cmd,應(yīng)用于DOS和Windows系統(tǒng)中,由其系統(tǒng)內(nèi)嵌的解釋器解釋運(yùn)行,類似于Unix中的Shell腳本。
批處理定義:顧名思義,批處理文件是將一系列命令按一定的順序集合為一個(gè)可執(zhí)行的文本文件,改其擴(kuò)展名為BAT或者CMD。這些命令被統(tǒng)稱批處理命令
一、基礎(chǔ)語(yǔ)法:
1.批處理文件是一個(gè)“.bat”結(jié)尾的文本文件,這個(gè)文件的每一行都是一條DOS命令。可以使用任何文本文件編輯工具創(chuàng)建和修改。
2.批處理是一種簡(jiǎn)單的程序,可以用 if 和 goto 來控制流程,也可以使用 for 循環(huán)。
3.批處理的編程能力遠(yuǎn)不如C語(yǔ)言等編程語(yǔ)言,也十分不規(guī)范。
4.每個(gè)編寫好的批處理文件都相當(dāng)于一個(gè)DOS的外部命令,把它所在的目錄放到DOS搜索路徑(path)中,即可在任意位置運(yùn)行。
5.C:AUTOEXEC.BAT 是每次系統(tǒng)啟動(dòng)時(shí)都會(huì)自動(dòng)運(yùn)行的,可以將每次啟動(dòng)時(shí)都要運(yùn)行的命令放入該文件中。
6.大小寫不敏感(命令符忽略大小寫)
7.批處理的文件擴(kuò)展名為 .bat 或 .cmd。
8.在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統(tǒng)就會(huì)調(diào)用Cmd.exe來運(yùn)行該文件。
二、參數(shù)
(1)系統(tǒng)參數(shù)
%SystemRoot% === C:WINDOWS (%windir% 同樣)
%ProgramFiles% === C:Program Files %USERPROFILE% === C:Documents and SettingsAdministrator (子目錄有“桌面”,“開始菜單”,“收藏夾”等)
%APPDATA% === C:Documents and SettingsAdministratorApplication Data
%TEMP% === C:DOCUME~1ADMINI~1LOCALS~1Temp (%TEM% 同樣)
%APPDATA% === C:Documents and SettingsAdministratorApplication Data
%OS% === Windows_NT (系統(tǒng))
%Path% === %SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem (原本的設(shè)置)
%HOMEDRIVE% === C: (系統(tǒng)盤) %HOMEPATH% === Documents and SettingsAdministrator
:: 枚舉當(dāng)前的環(huán)境變量 setlocal enabledelayedexpansion
FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i !%%i!
(2)傳參
%[1-9]表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。
變量可以從%0到%9,%0表示批處理命令本身,其它參數(shù)字符串用 %1 到 %9 順序表示。
Sample:
call test2.bat "hello" "haha" (執(zhí)行同目錄下的“test2.bat”文件,并輸入兩個(gè)參數(shù))
在“test2.bat”文件里寫:
echo %1 (打印: "hello")
echo %2 (打印: "haha")
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
三、批處理命令
1、pause 命令
會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵后繼續(xù)
Sample:
@echo off
:begin
copy a:*.* d:ack
echo Please put a new disk into driver A
pause
goto begin
在這個(gè)例子中,驅(qū)動(dòng)器 A 中磁盤上的所有文件均復(fù)制到d:ack中。顯示的信息提示您將另一張磁盤放入驅(qū)動(dòng)器 A 時(shí),pause 命令會(huì)使程序掛起,以便您更換磁盤,然后按任意鍵再次復(fù)制。
2、Echo 命令
語(yǔ)法: echo [{on|off}] [message]
ECHO [ON | OFF] 打開回顯或關(guān)閉回顯功能。
ECHO 顯示當(dāng)前回顯設(shè)置。
ECHO [message] 顯示信息。
echo off 表示在此語(yǔ)句后所有運(yùn)行的命令都不顯示命令行本身;默認(rèn)是on,on時(shí)會(huì)顯示如: C:文件夾路徑>命令行。
在實(shí)際應(yīng)用中我們會(huì)把這條命令和重定向符號(hào)( 也稱為管道符號(hào),一般用 > >> ^ )結(jié)合來實(shí)現(xiàn)輸入一些命令到特定格式的文件中。
Sample: echo off
Sample: echo hello world (顯示出“hello world”)
Sample: echo Windows Registry Editor Version 5.00 > c:setupreg.reg (此前還沒有 setupreg.reg 這個(gè)文件)
Sample: echo "SourcePath"="D:\Win2003\" >> c:setupreg.reg (追加內(nèi)容進(jìn) setupreg.reg 這個(gè)文件)
3、@ 命令
表示不顯示@后面的命令,(在入侵過程中自然不能讓對(duì)方看到你使用的命令啦)
@ 與 echo off 相象,但它是加在每個(gè)命令行的最前面,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。
Sample: @echo off (此語(yǔ)句常用于開頭,表示不顯示所有的命令行信息,包括此句)
Sample: @echo please wait a minite...
Sample: @format X: /q/u/autoset
(format 這個(gè)命令是不可以使用/y這個(gè)參數(shù)的,可喜的是微軟留了個(gè)autoset這個(gè)參數(shù)給我們,效果和/y是一樣的。)
4.Goto 命令
語(yǔ)法:goto label (label是參數(shù),指定所要轉(zhuǎn)向的批處理程序中的行。)
指定跳轉(zhuǎn)到標(biāo)簽行,找到標(biāo)簽行后,程序?qū)⑻幚韽南乱恍虚_始的命令。
label標(biāo)簽的名字可以隨便起,但是最好是有意義的,字母前必須加個(gè)冒號(hào)“:”來表示這個(gè)字母是標(biāo)簽。
goto命令就是根據(jù)這個(gè)冒號(hào)來尋找下一步跳到到那里。經(jīng)常與 if 配合使用,根據(jù)不同的條件來執(zhí)行不同的命令組。
例題見“5.Pause 命令”
5.Rem 命令
語(yǔ)法:Rem Message...
(小技巧:用::代替rem)
注釋命令,在C語(yǔ)言中相當(dāng)與/*...*/,它并不會(huì)被執(zhí)行,只是起一個(gè)注釋的作用,便于別人閱讀和自己日后修改。
Sample:@Rem Here is the description.
6.Pause 命令
會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵后繼續(xù)
復(fù)制代碼
Sample:
@echo off
:begin
copy a:*.* d:ack
echo Please put a new disk into driver A
pause
goto begin
復(fù)制代碼
在這個(gè)例子中,驅(qū)動(dòng)器 A 中磁盤上的所有文件均復(fù)制到d:ack中。
顯示的信息提示您將另一張磁盤放入驅(qū)動(dòng)器 A 時(shí),pause 命令會(huì)使程序掛起,以便您更換磁盤,然后按任意鍵再次復(fù)制。
7.Call 命令
語(yǔ)法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
參數(shù): [Drive:][Path] FileName 指定要調(diào)用的批處理程序的位置和名稱。filename 參數(shù)必須具有 .bat 或 .cmd 擴(kuò)展名。
調(diào)用另一個(gè)批處理程序,并且不終止父批處理程序。
如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令。
call 命令接受用作調(diào)用目標(biāo)的標(biāo)簽。如果在腳本或批處理文件外使用 Call,它將不會(huì)在命令行起作用。
Sample:call="%cd% est2.bat" haha kkk aaa (調(diào)用指定目錄下的 test2.bat,且輸入3個(gè)參數(shù)給他)
Sample:call test2.bat arg1 arg2 (調(diào)用同目錄下的 test2.bat,且輸入2個(gè)參數(shù)給他)
注:可以調(diào)用自身(死循環(huán)、遞歸)
8.start 命令
調(diào)用外部程序,所有的 DOS命令 和 命令行程序 都可以由 start命令 來調(diào)用。
入侵常用參數(shù):
MIN 開始時(shí)窗口最小化
SEPARATE 在分開的空間內(nèi)開始 16 位 Windows 程序
HIGH 在 HIGH 優(yōu)先級(jí)類別開始應(yīng)用程序
REALTIME 在 REALTIME 優(yōu)先級(jí)類別開始應(yīng)用程序
WAIT 啟動(dòng)應(yīng)用程序并等候它結(jié)束
parameters 這些為傳送到命令/程序的參數(shù)
Sample:start /MIN test2.bat arg1 arg2 (調(diào)用同目錄下的 test2.bat,且輸入2個(gè)參數(shù)給他,且本窗口最小化)
Sample:e:"program files"極品列車時(shí)刻表jpskb.exe (文件路徑名有空格時(shí))
8.If 命令
if 表示將判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。有三種格式:
1) IF
語(yǔ)法: if [not] "參數(shù)" == "字符串" 待執(zhí)行的命令
參數(shù)如果等于(not表示不等,下同)指定的字符串,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。(注意是兩個(gè)等號(hào))
Sample: if "%1" == "a" format a:
Sample: if {%1} == {} goto noparms
2) if exist
語(yǔ)法: if [not] exist [路徑]文件名 待執(zhí)行的命令
如果有指定的文件,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。
Sample: if exist config.sys edit config.sys (表示如果存在這文件,則編輯它,用很難看的系統(tǒng)編輯器)
Sample: if exist config.sys type config.sys (表示如果存在這文件,則顯示它的內(nèi)容)
3) if errorlevel number
語(yǔ)法: if [not] errorlevel <數(shù)字> 待執(zhí)行的命令
如果程序返回值等于指定的數(shù)字,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。(返回值必須按照從大到小的順序排列)
Sample:
@echo off
XCOPY F: est.bat D:
IF ERRORLEVEL 1 (ECHO 文件拷貝失敗
) Else IF ERRORLEVEL 0 ECHO 成功拷貝文件
pause
很多DOS程序在運(yùn)行結(jié)束后會(huì)返回一個(gè)數(shù)字值用來表示程序運(yùn)行的結(jié)果(或者狀態(tài)),稱為錯(cuò)誤碼errorlevel或稱返回碼。
常見的返回碼為0、1。通過if errorlevel命令可以判斷程序的返回值,根據(jù)不同的返回值來決定執(zhí)行不同的命令。
4) else
語(yǔ)法: if 條件 (成立時(shí)執(zhí)行的命令) else (不成立時(shí)執(zhí)行的命令)
如果是多個(gè)條件,建議適當(dāng)使用括號(hào)把各條件包起來,以免出錯(cuò)。
Sample: if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else (echo comment3 )
注:如果 else 的語(yǔ)句需要換行,if 執(zhí)行的行尾需用“^”連接,并且 if 執(zhí)行的動(dòng)作需用(括起來),否則報(bào)錯(cuò)
Sample: if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) ^
else (echo comment3 )
5) 比較運(yùn)算符:
EQU - 等于 (一般使用“==”)
NEQ - 不等于 (沒有 “!=”,改用“ if not 1==1 ”的寫法)
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
9.choice 命令
choice 使用此命令可以讓用戶輸入一個(gè)字符(用于選擇),從而根據(jù)用戶的選擇返回不同的 errorlevel,
然后配合 if errorlevel 選擇運(yùn)行不同的命令。
注意:choice命令為DOS或者Windows系統(tǒng)提供的外部命令,不同版本的choice命令語(yǔ)法會(huì)稍有不同,請(qǐng)用choice /?查看用法。
choice 使用此命令可以讓用戶輸入一個(gè)字符,從而運(yùn)行不同的命令。
使用時(shí)應(yīng)該加/c:參數(shù),c:后應(yīng)寫提示可輸入的字符,之間無空格。它的返回碼為1234……
復(fù)制代碼
Sample: choice /c:dme defrag,mem,end
將顯示: defrag,mem,end[D,M,E]?
Sample:
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (應(yīng)先判斷數(shù)值最高的錯(cuò)誤碼)
if errorlevel 2 goto mem
if errotlevel 1 goto end
復(fù)制代碼
Sample: choice /c:dme defrag,mem,end
將顯示: defrag,mem,end[D,M,E]?
Sample:
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (應(yīng)先判斷數(shù)值最高的錯(cuò)誤碼)
if errorlevel 2 goto mem
if errotlevel 1 goto end
10.for 命令
for 命令是一個(gè)比較復(fù)雜的命令,主要用于參數(shù)在指定的范圍內(nèi)循環(huán)執(zhí)行命令。
1) for {%variable | %%variable} in (set) do command [command-parameters]
%variable 指定一個(gè)單一字母可替換的參數(shù)。變量名稱是區(qū)分大小寫的,所以 %i 不同于 %I
在批處理文件中使用 FOR 命令時(shí),指定變量建議用 %%variable而不要用 %variable。
(set) 指定一個(gè)或一組文件。可以使用通配符。
command 指定對(duì)每個(gè)文件執(zhí)行的命令。
command-parameters 為特定命令指定參數(shù)或命令行開關(guān)。
2) 如果命令擴(kuò)展名被啟用,下列額外的 FOR 命令格式會(huì)受到支持:
a.FOR /D %variable IN (set) DO command [command-parameters]
如果集里面包含通配符,則指定與目錄名匹配,而不與文件名匹配。
b.FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹,指向每個(gè)目錄中的FOR 語(yǔ)句。
如果在 /R 后沒有指定目錄,則使用當(dāng)前目錄。如果集僅為一個(gè)單點(diǎn)(.)字符,則枚舉該目錄樹。
c.FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結(jié)束的一個(gè)數(shù)字序列。
如:(1,1,5) 將產(chǎn)生序列 1 2 3 4 5; 而(5,-1,1) 將產(chǎn)生序列 (5 4 3 2 1)。
d.有或者沒有 usebackq 選項(xiàng):
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
參數(shù)"options"為:
eol=c - 指一個(gè)行注釋字符的結(jié)尾(就一個(gè),如“;”)
skip=n - 指在文件開始時(shí)忽略的行數(shù)。
delims=xxx - 指分隔符集。這個(gè)替換了空格和跳格鍵的默認(rèn)分隔符集。
tokens=x,y,m-n - 指每行的哪一個(gè)符號(hào)被傳遞到每個(gè)迭代的 for 本身。這會(huì)導(dǎo)致額外變量名稱的分配。
m-n格式為一個(gè)范圍。通過 nth 符號(hào)指定 mth。
如果符號(hào)字符串中的最后一個(gè)字符星號(hào),那么額外的變量將在最后一個(gè)符號(hào)解析之后分配并接受行的保留文本。
usebackq - 指定新語(yǔ)法已在下類情況中使用:
在作為命令執(zhí)行一個(gè)后引號(hào)的字符串并且一個(gè)單引號(hào)字符為文字字符串命令并允許在 filenameset中使用雙引號(hào)擴(kuò)起文件名稱。
3) Sample:
1. 如下命令行會(huì)顯示當(dāng)前目錄下所有以bat或者txt為擴(kuò)展名的文件名。
for %%c in (*.bat *.txt) do (echo %%c)
a. 如下命令行會(huì)顯示當(dāng)前目錄下所有包含有 e 或者 i 的目錄名。
for /D %%a in (*e* *i*) do echo %%a
b. 如下命令行會(huì)顯示 E盤test目錄 下所有以bat或者txt為擴(kuò)展名的文件名。
for /R E: est %%b in (*.txt *.bat) do echo %%b
for /r %%c in (*) do (echo %%c) :: 遍歷當(dāng)前目錄下所有文件
c. 如下命令行將產(chǎn)生序列 1 2 3 4 5
for /L %%c in (1,1,5) do echo %%c
d. 以下兩句,顯示當(dāng)前的年月日和時(shí)間
For /f "tokens=1-3 delims=-/. " %%j In ('Date /T') do echo %%j年%%k月%%l日
For /f "tokens=1,2 delims=: " %%j In ('TIME /T') do echo %%j時(shí)%%k分
e. 把記事本中的內(nèi)容每一行前面去掉8個(gè)字符
setlocal enabledelayedexpansion
for /f %%i in (zhidian.txt) do (
set atmp=%%i
set atmp=!atmp:~8!
if {!atmp!}=={} ( echo.) else echo !atmp!
)
:: 讀取記事本里的內(nèi)容(使用 delims 是為了把一行顯示全,否則會(huì)以空格為分隔符)
for /f "delims=" %%a in (zhidian.txt) do echo.%%a
4) continue 和 break
利用 goto 實(shí)現(xiàn)程序中常用的 continue 和 break 命令, 其實(shí)非常簡(jiǎn)單
continue: 在 for 循環(huán)的最后一行寫上一個(gè)標(biāo)簽,跳轉(zhuǎn)到這位置即可
break: 在 for 循環(huán)的外面的下一句寫上一個(gè)標(biāo)簽,跳轉(zhuǎn)到這位置即可
Sample: (偽代碼)
for /F ["options"] %variable IN (command) DO (
... do command ...
if ... goto continue
if ... goto break
... do command ...
:continue
)
:break
四、其它命令
1. ping 命令
測(cè)試網(wǎng)絡(luò)聯(lián)接狀況以及信息包發(fā)送和接收狀況。但是不能夠測(cè)試端口。
語(yǔ)法:ping IP地址或主機(jī)名 [-t] [-a] [-n count] [-l size]
參數(shù)含義:
-t 不停地向目標(biāo)主機(jī)發(fā)送數(shù)據(jù);
-a 以IP地址格式來顯示目標(biāo)主機(jī)的網(wǎng)絡(luò)地址;
-n count 指定要Ping多少次,具體次數(shù)由count來指定;
-l size 指定發(fā)送到目標(biāo)主機(jī)的數(shù)據(jù)包的大小。
Sample: ping 192.168.0.1 -t (不停的測(cè)試192.168.0.1,按ctrl+c停止)
Sample: for /L %%a in (0,1,255) do ping 192.168.0.%%a -n 1 >> tmp.txt (ping一下所有的局域網(wǎng)電腦)
2. telnet 命令
測(cè)試端口使用 telnet IP地址或主機(jī)名 端口,使用tcp協(xié)議的
Sample: telnet 192.168.0.1 80 (測(cè)試192.168.0.1的80端口)
3.color 命令
設(shè)置背景及字體顏色
語(yǔ)法: color bf
b 是指定背景色的十六進(jìn)制數(shù)字; f 指定前景顏色(即字體顏色)。
顏色值: 0:黑色 1:藍(lán)色 2:綠色 3:湖藍(lán) 4:紅色 5:紫色 6:黃色 7:白色
8:灰色 9:淡藍(lán) A:淡綠 B:淺綠 C:淡紅 D:淡紫 E:淡黃 F:亮白
如果沒有給定任何參數(shù),該命令會(huì)將顏色還原到 CMD.EXE 啟動(dòng)時(shí)的顏色。
如果兩參數(shù)一樣,視為無效輸入。只有一個(gè)參數(shù)時(shí),設(shè)置字體。
4. random 命令
產(chǎn)生隨機(jī)數(shù)(正整數(shù)0~)
5. exit 命令
結(jié)束程序。即時(shí)是被調(diào)用的程序,結(jié)束后也不會(huì)返回原程序
6. shutdown命令
shutdown -s 關(guān)機(jī)
10. 所有內(nèi)置命令的幫助信息
ver /?
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命令
type /?
find /?
findstr /?
copy /?
原文地址:https://www.cnblogs.com/SunShineYPH/archive/2011/12/13/2285570.html
總結(jié)
以上是生活随笔為你收集整理的bat批处理脚本语言(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于购买壁挂式消毒柜的建议
- 下一篇: cad怎么画角度?cad画角度方法(CA