【Bat批處理】常用功能合集

一、符號含義

參考資源 windows CMD命令大全及詳細解釋和語法

符號 含義
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字符引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
“” 字符串界定符
命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標籤引導符
% 批處理變量引導符

1. 百分號%

  • 用於變量,代表變量的引用
     set A="Test" 
     echo %A%
     ::A的打印輸出爲"Test"
    
  • For循環中的特有的變量,一般的用法是%A(cmd)或%%A(bat腳本)

2. echo符號

  • echo variable - 打印variable的值
    set A="Test"
    Echo %A%
    :: 會打印"Test"      
    
  • @echo on - 會打印當前輸出命令 ,比如當前工作目錄是在D:\Temp\
    @echo on
    echo A
    :: 會打印
    :: D:\Temp > echo A
    :: A            
    
  • @echo of - 不會打印當前輸出命令,比如當前工作目錄是在D:\Temp\
     @echo off
    echo A
    :: 會打印
    :: A            
    

二、循環For語句

參考資源 windows CMD命令大全及詳細解釋和語法

for %%variable in (set) do command
  • %%variable - 循環中的變量,用來獲取值
  • set - 被遍歷的集合,比如是一個目錄,那麼遍歷它的子目錄;如果是一個文件,遍歷所有內容
  • command - 在variable變量滿足set集合時做的事

例子

@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 當前硬盤的分區有:
for %%i in (%str%) do ( 
  if exist %%i: echo %%i:
)

對一組文件中的每一個文件執行某個特定命令。命令擴展名被啓用,下列額外的 FOR 命令格式會受到支持

:: 如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配
FOR /D %variable IN (set) DO command [command-parameters]

:: 檢查以 [drive:]path 爲根的目錄樹,指向每個目錄中的 FOR 語句。如果在 /R 後沒有指定目錄,則使用當前目錄。如果集僅爲一個單點(.)字符,則枚舉該目錄樹    
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
  
:: 該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生序列 (5 4 3 2 1)   
FOR /L %variable IN (start,step,end) DO command [command-parameters]   

更多詳細信息請見參考資源

三、對比文件是否相同

參考資源 How can I compare two files in a batch file?

@echo on
fc D:\Temp\test\build1.txt D:\Temp\test\build2.txt > nul
if %errorlevel%==1 ( 
rd /s /q D:\Temp\test\AA\
)

errorlevel的值的含義

含義
-1 無效的語法(例如,僅傳遞了一個文件)
-2 文件相同
1 文件不同
2 找不到至少一個文件

使用errorlevel全局變量獲取是否相等,不相等則做其他的事

四、尋找進程和結束進程

1. 尋找進程

tasklist | find "ArcGISEarth.exe"
if %%errorlevel%%==0 (command)
}

判斷某個進程是否在運行中,errorlevel爲0則代表該進程正在運行

2. 結束進程

taskkill /F /T /IM "ArcGISEarth.exe"
參數 含義
/S System 指定要連接到的遠程系統
/U [domain]user 指定應該在哪個用戶上下文執行這個命令
/P [password] 爲提供的用戶上下文指定密碼。如果忽略,提示輸入
/F 強行終止進程
/FI Filter 指定篩選進或篩選出查詢的的任務
/PID processID 指定要終止的進程的PID
/IM ImageName 指定要終止的進程的映像名,通配符 '*'可用來指定所有映像名
/T Tree kill 終止指定的進程和任何由此啓動的子進程
/? 顯示幫助/用法

經常用到參數應該就是/F,可以強制結束某個進程

一個使用案例是判斷該進程是否正在運行,如果是則結束該進程,注意,從獲取進程到結束進程中需要有一定時間間隔,然後才能結束進程,這裏例子中間隔2s

tasklist /FI "IMAGENAME eq ArcGISEarth.exe" 2>NUL | find /I /N "ArcGISEarth.exe">NUL
ping -n 2 127.0.0.1>nul
if %errorlevel%==0 (taskkill /F /T /IM "ArcGISEarth.exe")

發現了一個更好的方法去結束程序

符號 含義
2>null 不顯示錯誤提示
1>null 不顯示正確提示
128 找不到特定程序錯誤提示的返回代碼
0 找到特定程序並結束進程的返回代碼
@echo on
:: 不顯示錯誤提示
taskkill /F /T /IM "ArcGISEarth.exe" 2>null
:: Earth已經正常自動關閉
if %errorlevel%==128 (echo "ArcGIS Earth end normally")
:: 強制關閉Earth
if %errorlevel%==0 (echo "ArcGIS Earth end Forcibly")
:: 暫停幾秒
ping -n 4 127.0.0.1>nul

五、字符串操作

1. 字符串替換

set text="12345678"
set name=%text:12=00%
echo %name%
:: 輸出00345678

六、創建刪除文件或文件夾

參考資源 bat刪除文件及文件夾

1. 文件的創建和刪除

創建文件,以下兩種方式均可以,注意如果有同名文件會默認覆蓋

echo > Test.txt
echo => Text.txt

刪除(Delete)文件

del D:\Temp\Test.txt /F /S /Q /A
參數 含義
/F 強制刪除
/S 從所有子目錄刪除指定文件
/Q 安靜模式,刪除文件時不需要提示
/A 根據屬性選擇要刪除的文件

2. 文件夾的創建和刪除

創建文件夾,使用md或者mkdir(Make directory)關鍵字

:: 這兩個關鍵字作用一致
md D:\Temp\Dir1\
mkdir D:\Temp\Dir2\
:: 創建多個文件夾,用空格分隔
mkdir D:\Temp\Dir1\ D:\Temp\Dir2\
:: 假設Dir1原本不存在,執行該命令後會自動創建中間目錄Dir1
mkdir D:\Temp\Dir1\SubDir\

刪除文件夾 (Remove directory)

:: 這兩個關鍵字作用一致
rd /S /Q D:\Temp\ 
rmdir /S /Q D:\Temp\ 
參數 含義
/S 從所有子目錄刪除指定文件
/Q 安靜模式,刪除文件時不需要提示

七、複製文件或文件夾

複製(Copy)文件

:: 複製A.txt文件到 Dir1目錄下,這時存在D:Temp\Dir1\A.txt 文件
copy D:Temp\A.txt D:Temp\Dir1\

:: 複製A.txt文件到 Dir1目錄下,並更名爲B.txt, 這時存在 D:Temp\Dir1\B.txt 文件
copy D:Temp\A.txt D:Temp\Dir1\B.txt
參數 含義
/A 表示一個 ASCII 文本文件
/B 表示一個二進位文件
/D 允許解密要創建的目標文件
/V 爲新文件指定目錄和/或文件名
/N 複製帶有非 8dot3 名稱的文件時,儘可能使用短文件名
/Y 不使用確認是否要改寫現有目標文件的提示
/-Y 使用確認是否要改寫現有目標文件的提示
/Z 用可重新啓動模式複製已聯網的文件

複製文件夾

:: 將Dir1 文件夾中所有文件 複製到 Dir2文件夾
xcpoy D:Temp\Dir1\ D:Tem\Dir2\ /D /S /Q /I /Y
參數 含義
/A 只複製有存檔屬性集的文件,但不改變屬性
/M 只複製有存檔屬性集的文件, 並關閉存檔屬性
/D 複製在指定日期或指定日期以後更改的文件, 如果沒有提供日期,只複製那些源時間, 比目標時間新的文件
/EXCLUDE 排除指定含有字符串的文件列表,如 /E:*.png 則表示不復制 png 文件
/P 在創建每個目標文件前提示
/S 複製目錄和子目錄,除了空的
/E 複製目錄和子目錄,包括空的
/V 驗證每個新文件
/W 提示在複製前按鍵
/C 即使有錯誤,也繼續複製
/I 如果目標不存在,而又在複製一個以上的文件,則假定目標一定是一個目錄
/Q 複製時不顯示文件名
/F 複製時顯示完整的源和目標文件名
/L 顯示要複製的文件
/G 允許將沒有經過加密的文件複製到不支持加密的目標
/H 也複製隱藏和系統文件
/R 覆蓋只讀文件
/T 創建目錄結構,但不復制文件,不包括空目錄或子目錄
/U 只複製已經存在於目標中的文件
/K 複製屬性,一般的 xcopy 會重置只讀屬性
/N 用生成的短名複製
/O 在寫入destination的文件中保留所有權和訪問控制列表(ACL)信息
/X 複製文件審覈設置和系統訪問控制列表(SACL)信息
/Y 阻止xcopy命令提示您覆蓋目標中已存在的源文件
/-Y 強制xcopy命令提示您有關覆蓋文件的信息
/Z 在網絡連接丟失時安全地停止複製文件,然後在重新建立連接後從中斷處恢復複製

八、設置文件屬性

參考 資源

當我們想直接刪除文件夾時可能會遇到這種錯誤,這是因爲這個文件夾裏面的文件有些是隻讀屬性,所以訪問受限
在這裏插入圖片描述
我們需要將這個目錄下的所有文件設置成非只讀屬性,然後才能刪除

attrib -r E:\Applications\DotNet\WinDesktop\Apps\arcgis-earth\*.* /s /d
參數 含義
±R 設置/移除 只讀屬性
±A 設置/移除 存檔屬性
±S 設置/移除 系統屬性
±H 設置/移除 隱藏屬性
±O 設置/移除 脫機屬性
±I 設置/移除 無內容引索屬性
±X 設置/移除 無清理屬性
±V 設置/移除 完整性屬性
±P 設置/移除 固定屬性
±U 設置/移除 非固定屬性
/S 處理當前文件夾及其所有子文件夾中的匹配文件
/D 處理文件夾
/L 處理符號鏈接和符號鏈接目標的屬性

九、If判斷變量是否一致

1. 判斷字符串

判斷字符串可以直接使用==

set var_1=%1
if %var_1%=="test" (echo "var_1 = test")

2. 判斷數值

符號 含義
EQU 等於
NEQ 不等於
LSS 小於
LEQ 不小於
GTR 大於
GEQ 不大於
set var_1=5
if %var_1% equ 5 (echo "var_1 = 5")

結合errorlevel使用,當一條命令正確執行後 errorlevel值爲0,否則不爲0,比如

xcopy D:\temp\ E:\temp\
if %errorlevel% neq 0 (echo "xcopy file failed!")

十、函數調用

@echo off

set var1=%1
set var2=%2
if var
call :Func1
Call :Func2
pause

::=====================
::函數名稱
::=====================
:Func1
set aa=%var1%
echo %aa%
goto:eof

::=====================
::函數名稱
::=====================
:Func2
set aa=%var2%
echo %aa%
goto:eof
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章