bat 腳本使用

bat 是batch的縮寫,直譯爲批處理。bat文件是存在於dos/windows中的腳本文件,bat的直接操作對象是dos命令,dos命令是system32下的exe或者cmd可執行程序的子集,長駐於內存中,具有簡單、處理速度快的特點,取名爲批處理毫無爭議,也是非圖形shell在windows操作系統中的直接體現,可以使用文本編輯器編寫,保存爲.bat格式。

bat的基本組成部分有數據類型、關鍵字、特殊符號、控制語句、命令、命令嵌套等。編制完整的bat腳本需要記憶較多的關鍵字、特殊符號,命令。當然,命令可以使用幫助查看。之後就是這些基本組成部分的搭配使用了。

一、開始 hello  world

未能免俗,以hello  world 開始。

@echo off 
echo hello  world
Pause

 

關鍵字echo 在DOS屏幕上有打印輸出的功能,相當於高級編程語言的print(),參數有on,off。on 表示在從下一行開始命令行顯示,off表示從下一行開始關閉命令行顯示。

而關鍵字@則是關閉當前命令行顯示的意思。

關鍵字pause表示DOS屏幕上暫停等待用戶下一步操作。

echo  hello the world
@echo  hello the world

echo off 
set var=this is my first program
set var=thanks

echo  on 
set var=hello the wold again
set var=this is my first program again 
set var=thanks again
Pause

二、數據類型、變量

bat 的數據類型只有整型和字符型,無浮點型變量,這也註定了bat能夠直接操作的數據類型非常少。當然bat也有數組,如創建一個含有1,2,3,4的數組。

set list=1 2 3 4

整型數據和字符型可以直接使用。

echo  off

echo 10
echo this my first bat program

Pause

bat 的分爲自定義變量、預定義變量和擴展變量,變量拼寫不區分大小寫。

1、自定義變量使用

自定義變量通過set 關鍵字賦值,變量類型有整型和字符型,無小數型變量。

set命令用於設置變量的值,加入參數/a爲數值型,不加參數/a爲字符型。加入/p表示等待用戶在屏幕輸入。

與高級程序語言不同的是,變量引用需要關鍵字%var%進行引用。

echo  off

set var=hello the wold again
echo %var%

Pause


 

2、預定義變量使用

預定義變量,或者叫做系統變量,是cmd中自帶的操作系統變量,該變量值已經固定,不能更改,涉及系統變量較多,如下:

%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 server operating system 根目錄(即系統根目錄)
的驅動器。
%SYSTEMROOT%系統 返回 Windows server operating system 根目錄的位置。
%TEMP% 和 %TMP% 系統和用戶 返回對當前登錄用戶可用的應用程序所使用的默認臨時目錄。
有些應用程序需要 TEMP,而其他應用程序則需要 TMP。
%TIME% 系統 返回當前時間。使用與 time /t 命令相同的格式。由 Cmd.exe 生成。有關
time 命令的詳細信息,請參閱 Time。
%USERDOMAIN% 本地 返回包含用戶帳戶的域的名稱。
%USERNAME% 本地 返回當前登錄的用戶的名稱。
%USERPROFILE% 本地 返回當前用戶的配置文件的位置。
%WINDIR% 系統 返回操作系統目錄的位置。

獲取預定義變量的值,如獲取當前操作系統的時間,預定義變量time如下:

echo on

echo %TIME%

Pause

 

3、擴展變量使用

擴展變量,準確的說是在bat腳本外部向內部傳遞參數值,相當於把bat文件看作爲一個主函數入口,在外部輸入參數,完全區別於自定義變量與系統變量。該參數引用使用%符號,該項也是很多使用bat腳本程序員理解的難點。因爲擴充變量還自帶特殊字母,其表達的意思也是相去甚遠。調用擴充變量最多爲10個,由於%0表示bat文件本身,因此外部參數其實是%1至%9。

  %0 代表bat本身文件名

  %1 代表第一個參數

  %2 代表第二個參數

  %3 代表第三個參數

。。。。。。。以此類推

@echo off

echo param[0] = %0
echo param[1] = %1
echo param[2] = %2
echo param[3] = %3
echo param[4] = %4
echo param[5] = %5
echo 
pause

假定本bat 文件位置是: d:\1.bat

cmd中運行之前鍵入(參數間用空格隔開):

d:\1.bat   第一個參數 第二個參數 30 40 最後一個參數 

輸出結果爲:

其他擴充變量還有:

%~1 - 刪除引號(\"),擴充 %1
%~f1- 將 %1 擴充到一個完全合格的路徑名
%~d1- 僅將 %1 擴充到一個驅動器號
%~p1- 僅將 %1 擴充到一個路徑
%~n1- 僅將 %1 擴充到一個文件名
%~x1- 僅將 %1 擴充到一個文件擴展名
%~s1- 擴充的路徑指含有短名
%~a1- 將 %1 擴充到文件屬性
%~t1- 將 %1 擴充到文件的日期/時間
%~z1- 將 %1 擴充到文件的大小
%~$PATH : 1 - 查找列在 PATH 環境變量的目錄,並將 %1

假定1.txt位置是D:\txt\1.txt,那麼:

@echo off

echo param[0] = %~f1
echo param[1] = %~d1
echo param[2] = %~p1
echo param[3] = %~n1
echo param[4] = %~x1
echo param[5] = %~s1
echo param[6] = %~a1
echo param[7]= %~t1
echo param[8]= %~z1
echo param[9]=%~$PATH:1
echo param[10] =%1
echo 
pause

那麼在cmd中鍵入:

1.bat D:\txt\1.txt

結果如下:

三、數值計算

bat 算術運算符如下:

()-分組
! ~ - -一元運算符
* / % -算數運算符
+ - -算數運算符
<< >> -二進制邏輯移位
-二進制按位“與”
^ -二進制按位“異”
| -二進制按位“或”
= *= /= %= += -=-算數賦值
= ^= |= <<= >>=-二進制運算賦值

設置變量時,在關鍵字後加入參數/a,將變量引用的字符轉化爲數值型,可以進行相關的數學運算。如5+1=6:

echo  off
set /a var=5

@rem 將var的值加1
set /a var=%var%+1

echo  %var%

Pause

注:rem關鍵字表示註釋,在命令行中無意義。

邏輯運算符寫法稍微有點差異,使用 字符串界定符\"邏輯運算符\",反斜杆引號反斜杆引號

如:

set /a var= 1 \"\" 1 這樣結果就顯示出來了,其他邏輯或取餘操作符用法
set /a var= 1 \"+\" 1 異運算
set /a var= 1 \"%\" 1取模運算
set /a var= 3 \"<<\" 2 左移位運算, 3的二進制爲11,左移2位爲1100,換成十進制就是12,自行驗證
set /a var= 4 \">>\" 2右移位運算,4的二進制爲100,右移動2位爲1,結果爲1

四、字符串處理

字符串處理一般有字符串的串聯、替換、截取和查找等處理過程,常常用於文件名處理和文字編輯處理。

(1)字符串串聯

字符串串聯無需像高級語言一樣使用運算符,只需要將不同字符串排列在一起即可。假設變量a爲hello,b爲world,a與b串聯即爲%a%%b%

@echo off

set a=hello 
set b=world
set c=%a%%b%
echo %c%

Pause

(2)字符串替換

字符串替換本身具有搜索匹配的功能,如:%a:str1=str2%,本句的意思爲將a字符串中含有字符串str1的字符串替換爲str2

@echo off

set a=hello world
echo a replace before:%a%

set a=%a:hello=world%
echo a replace after:%a%

pause

(3)字符串查找

跟所有高級語言一樣,bat也有自己的查找方式,且運用的通配符一致。通配符有?,*

通配符?條件查詢,後面會跟單個字母,表示查詢所有與之相關的字符串,並傳遞給其他變量

通配符*全文查詢,查詢所有字符串,並傳遞其他變量,

以上兩個通配符在搜索文件夾下遍歷文件名用處較大

假定bat 文件放置於D:\Program Files\JetBrains\PyCharm 2017.1.4\bin文件夾下,

查詢所有含有.dll後綴的文件:

@echo off
dir /b/s *.dll

Pause

(注:dir命令中/b表示沒有標題信息,/s指定全路徑名)

查詢所有第二個字母含是i的文件名的文件

@echo off

dir /b/s ?i*.*

Pause

結果如下:

(4)字符串截取

字符串截取需要知道截取的起始位置和截取的字符串數目長度。

表示方法爲:str:~m,n 其中:str表示要截取的字符串,m表示截取的起始位置,n表示截取的字符串長度,常有如下幾種處理方式:

%a:~0,n%表示從字符串a取左邊n位
%a:~-m%表示從字符串a取右邊m位
%a:~m,n% 表示從字符串a從m+1位開始取n位
%a:~m,-n% 表示從字符串a,由m+1位開始,至倒數n+1位
%a:~m %表示從字符串a 由m+1位開始取右邊全部。

從hello world中截取world字符

@echo off

set a=hello world
set b=%a:~6,5%
echo %b%

Pause

五 控制語句

bat控制語句有順序語句、條件語句,循環語句三種。值得注意的是,在條件語句中,有一類比較特別的語句叫做跳轉語句,使用關鍵字goto 與label配合使用。

1、順序語句

以上所有語句都是順序語句,順序語句按照文章排列結構,自上而下依次執行。

2、條件語句

條件語句語法如下:

(1)單一條件:if(條件) do commend

(2)多重條件:if (條件A) (do commend a ) ELSE (do commend b)

  (3)條件嵌套:if(條件A) if (條件B) do commend

以(3)舉例:

@echo off

SET /A a=5
SET /A b=10
if %a%==5 if %b%==10 echo "The value of the variables are correct"

pause

跳轉語句如下:

@echo off
set /a a=7


if %a%==6 goto :label1
if %a%==7 goto :label2


:label1 
echo %a%


:label2
echo %a%


pause

3、循環語句

 bat腳本的for語句語法如下:

  1. 在cmd窗口中:for %I in (集合A) 條件a, do command

  2. 在bat文件中:for %%I in (集合A) 條件a do command

集合A表示I可以遍歷的所有數據集,該數據集既可以是數組、文件夾、語句甚至於滿足某種條件的集合,command表示滿足條件時執行命令。該循環語句的含義爲使用迭代變量I對集合A進行遍歷,在遍歷過程中,如果滿足條件a,執行commend命令。

@echo off

set list=1 2 3 4 5

(for %%i in (%list%) do ( echo %%i ))

pause

六、特殊符號

特殊符號類型較多,部分是由於字母表示煩長、寫法囉嗦原因而採取的簡略手短。

1、@命令行回顯屏蔽符
2、%批處理變量引導符
3、> 重定向符
4、>>重定向符
5、<、>、<& 重定向符
6、|命令管道符
7、^轉義字符
8、組合命令
9、& 組合命令
10、||組合命令
11、\"\"字符串界定符
12、, 逗號
13、; 分號
14、() 括號
15、! 感嘆號
16、批處理中可能會見到的其它特殊標記符: (略)
17、* ? 文件通配符
18、/ 參數開關引導符
19、: 批處理標籤引導符
因篇幅所限,可以參考以下這篇文章:

https://blog.csdn.net/jhsword/article/details/95951847 windows中dos-批處理-命令特殊符號-通配符與轉義符

七、函數

函數是組織在一起執行特定任務的一組語句。 在批處理腳本中,採用類似的方法將邏輯語句組合在一起形成一個函數。

像其他語言一樣,批處理腳本中的函數也遵循相同的程序規則 -

  • 函數聲明 - 它告訴編譯器一個函數的名字,返回類型和參數。
  • 函數定義 - 它提供了函數的實際主體。

每個函數都有一個函數名稱,它描述了函數執行的任務。 要使用一個函數,需要用它的名稱來“調用”這個函數,並傳遞與函數參數類型相匹配的輸入值(稱爲參數)。函數調用使用call關鍵字:

@echo off 
SETLOCAL
 
CALL :Display 

pause

:Display 
SET /a index=5 
echo The value of index is %index% 
 


 

八、常用命令

bat命令分爲內部命令和外部命令。

1、內部命令是指cmd.exe的內部命令,由於cmd.exe是windows操作系統的底層引導程序,所以內部命令長駐於內存中,內部命令有:

ASSOC            顯示或修改文件擴展名關聯。
ATTRIB           顯示或更改文件屬性。
BREAK            設置或清除擴展式 CTRL+C 檢查。
BCDEDIT        設置啓動數據庫中的屬性以控制啓動加載。
CACLS            顯示或修改文件的訪問控制列表(ACL)。
CALL              從另一個批處理程序調用這一個。
CD                 顯示當前目錄的名稱或將其更改。
CHCP             顯示或設置活動代碼頁數。
CHDIR            顯示當前目錄的名稱或將其更改。
CHKDSK         檢查磁盤並顯示狀態報告。
CHKNTFS       顯示或修改啓動時間磁盤檢查。
CLS                清除屏幕。
CMD              打開另一個 Windows 命令解釋程序窗口。
COLOR          設置默認控制檯前景和背景顏色。
COMP           比較兩個或兩套文件的內容。
COMPACT     顯示或更改 NTFS 分區上文件的壓縮。
CONVERT      將 FAT 卷轉換成 NTFS。你不能轉換當前驅動器。
COPY             將至少一個文件複製到另一個位置。
DATE             顯示或設置日期。
DEL                刪除至少一個文件。
DIR                 顯示一個目錄中的文件和子目錄。
DISKPART       顯示或配置磁盤分區屬性。
DOSKEY         編輯命令行、撤回 Windows 命令並創建宏。
DRIVERQUERY    顯示當前設備驅動程序狀態和屬性。
ECHO                  顯示消息,或將命令回顯打開或關閉。
ENDLOCAL          結束批文件中環境更改的本地化。
ERASE                  刪除一個或多個文件。
EXIT                     退出 CMD.EXE 程序(命令解釋程序)。
FC                        比較兩個文件或兩個文件集並顯示
                      它們之間的不同。
FIND              在一個或多個文件中搜索一個文本字符串。
FINDSTR        在多個文件中搜索字符串。
FOR               爲一組文件中的每個文件運行一個指定的命令。
FORMAT       格式化磁盤,以便用於 Windows。
FSUTIL           顯示或配置文件系統屬性。
FTYPE          顯示或修改在文件擴展名關聯中使用的文件類型。
GOTO           將 Windows 命令解釋程序定向到批處理程序中某個帶標籤的行。
GPRESULT       顯示計算機或用戶的組策略信息。
GRAFTABL       使 Windows 在圖形模式下顯示擴展字符集。
HELP            提供 Windows 命令的幫助信息。
ICACLS         顯示、修改、備份或還原文件和目錄的 ACL。
IF                 在批處理程序中執行有條件的處理操作。
LABEL          創建、更改或刪除磁盤的卷標。
MD              創建一個目錄。
MKDIR         創建一個目錄。
MKLINK        創建符號鏈接和硬鏈接
MODE           配置系統設備。
MORE           逐屏顯示輸出。
MOVE           將一個或多個文件從一個目錄移動到另一個目錄。
OPENFILES      顯示遠程用戶爲了文件共享而打開的文件。
PATH               爲可執行文件顯示或設置搜索路徑。
PAUSE          暫停批處理文件的處理並顯示消息。
POPD           還原通過 PUSHD 保存的當前目錄的上一個值。
PRINT          打印一個文本文件。
PROMPT      更改 Windows 命令提示。
PUSHD         保存當前目錄,然後對其進行更改。
RD                刪除目錄。
RECOVER      從損壞的或有缺陷的磁盤中恢復可讀信息。
REM            記錄批處理文件或 CONFIG.SYS 中的註釋(批註)。
REN             重命名文件。
RENAME     重命名文件。
REPLACE      替換文件。
RMDIR          刪除目錄。
ROBOCOPY       複製文件和目錄樹的高級實用工具
SET            顯示、設置或刪除 Windows 環境變量。
SETLOCAL       開始本地化批處理文件中的環境更改。
SC             顯示或配置服務(後臺進程)。
SCHTASKS       安排在一臺計算機上運行命令和程序。
SHIFT          調整批處理文件中可替換參數的位置。
SHUTDOWN       允許通過本地或遠程方式正確關閉計算機。
SORT           對輸入排序。
START          啓動單獨的窗口以運行指定的程序或命令。
SUBST          將路徑與驅動器號關聯。
SYSTEMINFO     顯示計算機的特定屬性和配置。
TASKLIST       顯示包括服務在內的所有當前運行的任務。
TASKKILL       中止或停止正在運行的進程或應用程序。
TIME           顯示或設置系統時間。
TITLE          設置 CMD.EXE 會話的窗口標題。
TREE           以圖形方式顯示驅動程序或路徑的目錄結構。
TYPE           顯示文本文件的內容。
VER            顯示 Windows 的版本。
VERIFY        告訴 Windows 是否進行驗證,以確保文件正確寫入磁盤。
VOL            顯示磁盤卷標和序列號。
XCOPY          複製文件和目錄樹。
WMIC           在交互式命令 shell 中顯示 WMI 信息。
 

2、外部命令

外部命令是指在system32/system64下的cmd或者exe可執行程序,有時候我們在網上看的一些可執行程序似乎別人用時也是以外部命令執行,但是我們在計算機中使用的時候,計算機會告訴我們該程序既不是外部命令也不是內部命令,此時應該將該可執行程序拷貝至system32/system64目錄下,從而計算機識別爲外部命令,也就是所謂的外部命令擴展。如:我們常常使用的ping命令、nslookup命令、netstat命令就是外部命令。

1. calc-----------啓動計算器

2. certmgr.msc----證書管理實用程序

3. charmap--------啓動字符映射表

4. chkdsk.exe-----Chkdsk磁盤檢查

5. ciadv.msc------索引服務程序

6. cleanmgr-------垃圾整理

7. cliconfg-------SQL SERVER 客戶端網絡實用程序

8. Clipbrd--------剪貼板查看器

9. cmd.exe--------CMD命令提示符

10. compmgmt.msc---計算機管理

11. conf-----------啓動netmeeting

12. dcomcnfg-------打開系統組件服務

13. ddeshare-------打開DDE共享設置

14. devmgmt.msc--- 設備管理器

15. dfrg.msc-------磁盤碎片整理程序

16. diskmgmt.msc---磁盤管理實用程序

17. drwtsn32------ 系統醫生

18. dvdplay--------DVD播放器

19. dxdiag---------檢查DirectX信息

20. eudcedit-------造字程序

21. eventvwr-------事件查看器

22. explorer-------打開資源管理器

23. fsmgmt.msc-----共享文件夾管理器

24. gpedit.msc-----組策略

25. iexpress-------木馬捆綁工具,系統自帶

26. logoff---------註銷命令

27. lusrmgr.msc----本機用戶和組

28. magnify--------放大鏡實用程序

29. mem.exe--------顯示內存使用情況

30. mmc------------打開控制檯

31. mobsync--------同步命令

32. mplayer2-------簡易widnows media player

33. Msconfig.exe---系統配置實用程序

34. mspaint--------畫圖板

35. mstsc----------遠程桌面連接

36. narrator-------屏幕“講述人”

37. net start messenger----開始信使服務

38. net stop messenger-----停止信使服務

39. netstat -an----(TC)命令檢查接口

40. notepad--------打開記事本

41. Nslookup-------IP地址偵測器

42. ntbackup-------系統備份和還原

43. ntmsmgr.msc----移動存儲管理器

44. ntmsoprq.msc---移動存儲管理員操作請求

45. odbcad32-------ODBC數據源管理器

46. oobe/msoobe /a----檢查XP是否激活

47. osk------------打開屏幕鍵盤

48. packager-------對象包裝程序

49. perfmon.msc----計算機性能監測程序

50. progman--------程序管理器

51. regedit.exe----註冊表

52. regedt32-------註冊表編輯器

53. regsvr32 /u *.dll----停止dll文件運行

54. regsvr32 /u zipfldr.dll------取消ZIP支持

55. rononce -p ----15秒關機

56. rsop.msc-------組策略結果集

57. secpol.msc-----本地安全策略

58. services.msc---本地服務設置

59. sfc /scannow---windows文件保護

60. sfc.exe--------系統文件檢查器

61. shrpubw--------創建共享文件夾

62. sigverif-------文件簽名驗證程序

63. sndrec32-------錄音機

64. Sndvol32-------音量控制程序

65. syncapp--------創建一個公文包

66. sysedit--------系統配置編輯器

67. syskey---------系統加密,一旦加密就不能解開,保護windows xp系統的雙重密碼 (慎用)

68. taskmgr--------任務管理器

69. tourstart------xp簡介(安裝完成後出現的漫遊xp程序)

70. tsshutdn-------60秒倒計時關機命令

71. utilman--------輔助工具管理器

72. wiaacmgr-------掃描儀和照相機嚮導

73. winchat--------XP自帶局域網聊天

74. winmsd---------系統信息

75. winver---------檢查Windows版本

76. wmimgmt.msc----打開windows管理體系結構(WMI)

77. write----------寫字板

78. wscript--------windows腳本宿主設置

79. wupdmgr--------windows更新程序

兩種命令可以參考:https://blog.csdn.net/lijie45655/article/details/81806212

由於特殊字符和命令涉及的數量較多,平時使用時還是需要藉助搜索引擎的。

 

九、小結

如同所有shell一樣,bat 腳本具有簡單、快捷的特點,但缺點也是明顯的:不是圖形化的、數據結構簡單以及命令衆多等等,遠沒有c/c++、java等高級編程語言那樣賞心悅目。當然,shell腳本依然有着衆多的擁護者,除去小部分黑客使用一些簡單操作以外,在服務器端,爲了服務器性能的需要,shell依然是一種非常常見的處理方式。也是因爲部分老的使用者已經習慣了這樣的處理方式,如果短時間做出改變,也是較爲困難。如果不是硬件方面的諸多瓶頸,誰願意用這樣一種編碼方式呢。

 

 

發佈了98 篇原創文章 · 獲贊 181 · 訪問量 72萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章