教你編寫bat腳本W(wǎng)indows批處理
批處理腳本文件具有特殊的擴(kuò)展名BAT或CMD,這種類型的文件通過稱為**命令解釋器(cmd.exe)**的系統(tǒng)文件提供的接口(shell)來識(shí)別和執(zhí)行。
常見用途
- 為不同的目的設(shè)置服務(wù)器
- 自動(dòng)管理活動(dòng)和日志,如刪除不需要的文件或日志文件
- 自動(dòng)將應(yīng)用程序從一個(gè)環(huán)境部署到另一個(gè)環(huán)境。
- 立即在各種機(jī)器上安裝程序。
bat命令速查
命令 | 備注 |
---|---|
VER | 顯示正在使用的MS-DOS的版本 |
ASSOC | 這是將擴(kuò)展名與文件類型(FTYPE)相關(guān)聯(lián)的批處理命令,顯示現(xiàn)有關(guān)聯(lián)或刪除關(guān)聯(lián) |
cd | 更改不同的目錄,或顯示當(dāng)前目錄 |
CLS | 清屏 |
COPY | 文件復(fù)制 |
DEL | 刪除文件 |
DIR | 列出目錄內(nèi)容 |
DATE | 系統(tǒng)日期 |
ECHO | 顯示消息,或打開、關(guān)閉命令回顯 |
EXIT | 退出DOS控制臺(tái) |
MD | 創(chuàng)建目錄 |
MOVE | 移動(dòng)文件或目錄 |
PATH | 顯示或設(shè)置路徑變量 |
PAUSE | 等待輸入 |
PROMPT | 用于更改或重置cmd.exe提示符 |
RD | 刪除目錄(需為空) |
REN | 重命名文件和目錄 |
REM | 注釋 |
START | 在新窗口中啟動(dòng)程序,或打開文檔 |
TIME | 設(shè)置或顯示時(shí)間 |
TYPE | 將文件或文件的內(nèi)容打印到輸出中 |
VOL | 顯示卷標(biāo) |
ATTRIB | 顯示或設(shè)置當(dāng)前目錄中的文件的屬性 |
CHKDSK | 檢查磁盤是否有問題 |
CHOICE | 為用戶提供了一個(gè)選項(xiàng)列表 |
CMD | 調(diào)用另一個(gè)命令提示符實(shí)例 |
COMP | 根據(jù)文件大小比較2個(gè)文件 |
CONVERT | 將卷從FAT16或FAT32文件系統(tǒng)轉(zhuǎn)換為NTFS文件系統(tǒng) |
DRIVERQUERY | 顯示所有已安裝的設(shè)備驅(qū)動(dòng)程序及其屬性 |
EXPAND | 從壓縮的.cab壓縮文件中提取文件 |
FIND | 在文件或輸入中搜索字符串,輸出匹配的行 |
FORMAT | 將磁盤格式化為使用Windows支持的文件系統(tǒng)(如FAT,F(xiàn)AT32或NTFS),從而覆蓋磁盤的先前內(nèi)容 |
HELP | 顯示W(wǎng)indows提供的命令的列表 |
IPCONFIG | 顯示W(wǎng)indows IP配置。顯示連接的配置和連接的名稱 |
LABEL | 添加,設(shè)置或刪除磁盤標(biāo)簽 |
MORE | 一次顯示一個(gè)或多個(gè)文件的內(nèi)容 |
NET | 根據(jù)使用的命令提供各種網(wǎng)絡(luò)服務(wù) |
PING | 通過網(wǎng)絡(luò)將ICMP/IP “回顯”發(fā)送到指定的地址的包 |
SHUTDOWN | 關(guān)閉計(jì)算機(jī),或者注銷當(dāng)前用戶 |
SORT | 從源文件獲取輸入,并按字母順序排序其內(nèi)容,從A到Z或從Z到A。它將在控制臺(tái)上打印輸出 |
SUBST | 將驅(qū)動(dòng)器號(hào)分配給本地文件夾,顯示當(dāng)前分配或刪除分配 |
SYSTEMINFO | 該批處理命令顯示計(jì)算機(jī)及其操作系統(tǒng)的配置 |
TASKKILL | 該批處理命令結(jié)束一個(gè)或多個(gè)任務(wù) |
TASKLIST | 列出任務(wù),包括任務(wù)名稱和進(jìn)程標(biāo)識(shí)(PID) |
XCOPY | 以更高級(jí)的方式復(fù)制文件和目錄 |
TREE | 將當(dāng)前目錄的所有子目錄的樹顯示為遞歸或深度的任何級(jí)別 |
FC | 列出兩個(gè)文件之間的實(shí)際差異 |
DISKPART | 顯示和配置磁盤分區(qū)的屬性 |
TITLE | 該批處理命令設(shè)置控制臺(tái)窗口中顯示的標(biāo)題 |
SET | 顯示當(dāng)前系統(tǒng)上的環(huán)境變量列表 |
常用參數(shù)
/L
: for循環(huán)移動(dòng)范圍的/L
參數(shù)用于迭代數(shù)組。
/A
:數(shù)值
echo
@echo off
- “echo off” :關(guān)閉腳本的顯示(不顯示命令)。
- “@” :使命令也適用于自己。
注釋
Rem
Rem Remarks
程序執(zhí)行時(shí)忽略Rem關(guān)鍵字之后的任何內(nèi)容。
使用::聲明
:: Remarks
dir :獲取目錄內(nèi)容
> :將輸出重定向到文件
@echo off Rem This is for listing down all the files in the directory Program files dir "C:\Program Files" > C:\lists.txt echo "The program has completed"
變量
命令行參數(shù)
rem Test.bat @echo off echo %1 echo %2 echo %3
運(yùn)行方式
Test.bat 1 2 3
set命令
set /A variable-name=value
- variable-name: 變量的名稱
- value:變量值。
- /A:如果該值本質(zhì)上是數(shù)值,則使用此開關(guān)。
字符串
@echo off set message=Hello World echo %message% rem 變量需要包含在%符號(hào)中顯示
數(shù)值
@echo off SET /A a=5 SET /A b=10 SET /A c=%a% + %b% echo %c%
局部變量 vs 全局變量
- 默認(rèn)情況下為全局變量。
- 調(diào)用
SETLOCAL
命令,使變量局部在腳本的范圍內(nèi)。 - 在調(diào)用SETLOCAL之后,任何變量賦值在調(diào)用
ENDLOCAL
,調(diào)用EXIT
,或者當(dāng)執(zhí)行到達(dá)腳本中的文件結(jié)尾(EOF)時(shí)都會(huì)返回。
@echo off set globalvar=5 SETLOCAL set var=13145 set /A var=%var% + 5 echo %var% echo %globalvar% ENDLOCAL
環(huán)境變量輸出
@echo off echo %JAVA_HOME%
字符串
創(chuàng)建
set message=Hello World
空字符串
SET a= if [%a%]==[] echo "String A is empty"
要檢查是否存在空字符串,需要在方括號(hào)中包含變量名,并將其與方括號(hào)中的值進(jìn)行比較。
字符串拼接
@echo off SET a=Hello SET b=World SET /A d=50 SET c=%a% and %b% %d% echo %c% :: Hello and World 50
字符串長(zhǎng)度
@echo off set str=Hello World call :strLen str strlen echo String is %strlen% characters long exit /b :strLen setlocal enabledelayedexpansion :strLen_Loop if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop (endlocal & set %2=%len%) goto :eof
轉(zhuǎn)int
使用set變量設(shè)置為字符串的變量后,可以使用set變量的**/A開關(guān)轉(zhuǎn)換為整數(shù)**。
@echo off set var=13145 set /A var=%var% + 5 echo %var%
截取
%variable:~num_chars_to_skip% %variable:~num_chars_to_skip,num_chars_to_keep%
輸出:
Helloworld
Hello
~0,5
用于指定需要顯示的字符
右對(duì)齊
@echo off set x=1000 set y=1 set y=%y% echo %x% set y=%y:~-4% echo %y%
輸出
1000
1
使用~-4
選項(xiàng)來表示只想顯示字符串y的最后4個(gè)字符。
刪除字符串
@echo off set str=Batch scripts is easy. It is really easy. echo %str% :: 刪除is set str=%str:is=% echo %str% :: Batch scripts easy. It really easy.
刪除兩端(保留中間)
@echo off set str=Batch scripts is easy. It is really easy echo %str% set str=%str:~1,-1% echo %str% :: atch scripts is easy. It is really eas
刪除空格:=
@echo off set str=This string has a lot of spaces echo %str% set str=%str:=% echo %str% :: Thisstringhasalotofspaces
替換
@echo off set str=This message needs changed. echo %str% set str=%str:needs=has% echo %str% :: This message has changed.
數(shù)組
創(chuàng)建
- 方法一:set
set a[0]=1
- 方法二:值列表遍歷
@echo off set list=1 2 3 4 (for %%a in (%list%) do ( echo %%a ))
訪問
echo %a[0]%
修改
Set a[3]=4
迭代
@echo off setlocal enabledelayedexpansion set topic[0]=comments set topic[1]=variables set topic[2]=Arrays set topic[3]=Decision making set topic[4]=Time and date set topic[5]=Operators for /l %%n in (0,1,5) do ( echo !topic[%%n]! )
for循環(huán)移動(dòng)范圍的/L
參數(shù)用于迭代數(shù)組。
數(shù)組長(zhǎng)度
@echo off set Arr[0]=1 set Arr[1]=2 set Arr[2]=3 set Arr[3]=4 set "x=0" :SymLoop if defined Arr[%x%] ( call echo %%Arr[%x%]%% set /a "x+=1" GOTO :SymLoop ) echo "The length of the array is" %x%
結(jié)構(gòu)體
@echo off set len=3 set obj[0].Name=Joe set obj[0].ID=1 set obj[1].Name=Mark set obj[1].ID=2 set obj[2].Name=Mohan set obj[2].ID=3 set i=0 :loop if %i% equ %len% goto :eof set cur.Name= set cur.ID= for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( set cur.%%k=%%l ) echo Name=%cur.Name% echo Value=%cur.ID% set /a i=%i%+1 goto loop
if語句
if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value")
if defined
:變量是否存在
if defined str1 echo "Variable str1 is defined"
if exists
:文件是否存在
if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")
if errorlevel
:測(cè)試運(yùn)行的最后一個(gè)命令的退出代碼
if errorlevel n somecommand
各種命令發(fā)出整數(shù)退出代碼來表示命令的狀態(tài)。 通常,如果命令成功完成,則命令通過傳遞0;如果命令失敗,命令通過傳遞1。
for語句
- %variable 指定一個(gè)單一字母可替換的參數(shù)。注意:批處理腳本中使用%%variable
- (set) 指定一個(gè)或一組文件??梢允褂猛ㄅ浞?。
- command 指定對(duì)每個(gè)文件執(zhí)行的命令。
- command-parameters 為特定命令指定參數(shù)或命令行開關(guān)。
/d
/r
/l
/f
goto語句
@echo off SET /A a=5 if %a%==5 goto :labela if %a%==10 goto :labelb :labela echo "The value of a is 5" exit /b 0 :labelb echo "The value of a is 10"
運(yùn)算符
關(guān)系運(yùn)算符
運(yùn)算符 | 備注 |
---|---|
EQU | 相等 |
NEQ | 不等 |
LSS | 左小于右 |
LEQ | 小于等于 |
GTR | 大于 |
GEQ | 大于等于 |
系統(tǒng)日期
echo %DATE%
日期格式化
@echo off echo/Today is: %year%-%month%-%day% goto :EOF setlocal ENABLEEXTENSIONS set t=2&if "%date%z" LSS "A" set t=1 for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do ( for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do ( set %%a=%%d&set %%b=%%e&set %%c=%%f)) endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
系統(tǒng)時(shí)間
echo %TIME%
輸入輸出
- 0:stdin 標(biāo)準(zhǔn)輸入
- 1:stdout 標(biāo)準(zhǔn)輸出
- 2:stderr 錯(cuò)誤消息
重定向
DIR C:\ > lists.txt 2> &1
- 使用文件編號(hào)和"&"前綴來組合stdout和stderr流
函數(shù)
:function_name Do_something EXIT /B 0
- function_name是賦予函數(shù)的名字,它應(yīng)該與函數(shù)的實(shí)際功能相匹配。
- EXIT語句用于確保函數(shù)正常退出.
:Display SET /A index=2 echo The value of index is %index% EXIT /B 0
調(diào)用 call :function_name
@echo off Rem main SETLOCAL CALL :Display 5 , 10 EXIT /B %ERRORLEVEL% Rem function :Display echo The value of parameter 1 is %~1 echo The value of parameter 2 is %~2 EXIT /B 0
- 確保在主程序中放入
EXIT / B%ERRORLEVEL%
語句,以便將主程序的代碼與函數(shù)分開。 - 使用
~1
來訪問發(fā)送給函數(shù)的第一個(gè)參數(shù),同樣使用~2
來訪問第二個(gè)參數(shù)。
進(jìn)程
查看進(jìn)程列表TASKLIST
:: 獲取內(nèi)存大于40MB的進(jìn)程 tasklist /fi "memusage gt 40000"
/S system | 指定要連接的遠(yuǎn)程系統(tǒng) |
/U [domain]user | 指定命令應(yīng)在其下執(zhí)行的用戶上下文 |
/P [password] | 指定給定用戶上下文的密碼。 提示輸入,如果省略。 |
/M [module] | 列出當(dāng)前使用給定的exe / dll名稱的所有任務(wù)。 如果未指定模塊名稱,則顯示所有已加載的模塊。 |
/SVC | 顯示每個(gè)進(jìn)程中托管的服務(wù)。 |
/V | 顯示詳細(xì)的任務(wù)信息。 |
/FI filter | 顯示一組符合過濾器指定條件的任務(wù)。 |
/FO format | 指定輸出格式。 有效值:TABLE,LIST,CSV。 |
/NH | 指定“列標(biāo)題”不應(yīng)顯示在輸出中。 僅適用于TABLE和CSV格式。 |
:: 獲取內(nèi)存大于40MB的進(jìn)程 tasklist /fi "memusage gt 40000"
終止進(jìn)程
START "title" [/D path] [options] "command" [parameters]
/S system | 指定要連接的遠(yuǎn)程系統(tǒng) |
/U [domain]user | 指定命令應(yīng)在其下執(zhí)行的用戶上下文。 |
/P [password] | 指定給定用戶上下文的密碼。 提示輸入,如果省略。 |
/FI FilterName | 應(yīng)用過濾器來選擇一組任務(wù),允許使用*通配符。 |
/PID processID | 指定要終止的進(jìn)程的PID。使用TaskList來獲取PID。 |
/IM ImageName | 指定要終止的進(jìn)程的映像名稱。 通配符*可用于指定所有任務(wù)或圖像名稱。 |
/T | 終止指定的進(jìn)程以及由其啟動(dòng)的任何子進(jìn)程。 |
/F | 指定強(qiáng)制終止進(jìn)程。 |
:: 殺死(終止)打開的記事本任務(wù) taskkill /f /im notepad.exe :: 殺死了一個(gè)ID為9901的進(jìn)程 taskill /pid 9901
啟動(dòng)進(jìn)程
START "title" [/D path] [options] "command" [parameters]
title | CMD窗口標(biāo)題欄的文本(必需) |
path | 起始目錄。 |
command | 命令,批處理文件或可執(zhí)行程序運(yùn)行。 |
parameters | 傳遞給命令的參數(shù) |
options:
/MIN | 啟動(dòng)窗口最小化。 |
/MAX | 啟動(dòng)窗口最大化。 |
/LOW | 使用IDLE優(yōu)先級(jí)。 |
/NORMAL | 使用NORMAL優(yōu)先級(jí)。 |
/ABOVENORMAL | 使用ABOVENORMAL優(yōu)先級(jí)。 |
/BELOWNORMAL | 使用BELOWNORMAL優(yōu)先級(jí)。 |
/HIGH | 使用HIGH優(yōu)先級(jí)。 |
/REALTIME | 使用REALTIME優(yōu)先級(jí)。 |
:: 在新窗口中運(yùn)行批處理腳本test.bat。 窗口將以最小化模式啟動(dòng),并且指定標(biāo)題為:“Test Batch Script”。 START "Test Batch Script" /Min test.bat :: 在另一個(gè)進(jìn)程中運(yùn)行Microsoft Word,然后在MS Word中打開文件TESTA.txt START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
別名
dw=dir /w
當(dāng)要執(zhí)行dir /w命令時(shí),可以簡(jiǎn)單地鍵入dw這個(gè)單詞。dw這個(gè)詞現(xiàn)在已經(jīng)成為命令dir /w的別名。
doskey 別名管理
DOSKEY [options] [macroname=[text]]
創(chuàng)建
@echo off doskey cd=cd/test doskey d=dir
刪除
@echo off doskey cd=cd/test doskey d=dir d=
將d的值設(shè)置為NULL,所以宏d將被刪除。
管道(|)
管道運(yùn)算符(|)將一個(gè)命令的輸出(默認(rèn)為STDOUT)引導(dǎo)到另一個(gè)命令的輸入(默認(rèn)為STDIN)。
:: 兩個(gè)命令同時(shí)啟動(dòng),但是sort命令暫停,直到它接收到dir命令的輸出。 :: sort命令使用dir命令的輸出作為輸入,然后將其輸出發(fā)送到句柄1(即STDOUT)。 dir C:\ | sort
到此這篇關(guān)于教你編寫bat腳本W(wǎng)indows批處理的文章就介紹到這了,更多相關(guān)bat腳本W(wǎng)indows批處理內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。