這些自動(dòng)化場(chǎng)景,批處理腳本完全可以取代 Python!
1. 前言
提到自動(dòng)化解決方案,相信大部分人會(huì)想到用 Python 語(yǔ)言,只需要根據(jù)功能場(chǎng)景,編寫(xiě) Python 腳本即可。
相反,PC 端的 Batch 批處理 似乎快被忘記了,很多人對(duì)它嗤之以鼻,認(rèn)為這么古老的腳本語(yǔ)言貌似沒(méi)什么用,Python 似乎可以取而代之。
相比 Python 腳本,Batch 批處理腳本在某些場(chǎng)景下,使用更簡(jiǎn)潔、方便、高效,即寫(xiě)即用,不需要依賴 Python 環(huán)境,并且可以完全擺脫打包等繁瑣步驟。
2. 批處理
基礎(chǔ)新建批處理腳本很簡(jiǎn)單,只需要新建一個(gè)文本文件,然后修改編碼方式為:ANSI 編碼,接著編寫(xiě)腳本邏輯代碼,最后保存文件以 .bat 結(jié)尾即可。
Batch 常用命令包含:echo、::/rem、title/color、cd/md/dir、rd/del/copy、pause、goto、for、if、set、start等。
其中:
@echo off 代表在本行開(kāi)始關(guān)閉回顯,不顯示正在執(zhí)行的批處理命令及執(zhí)行結(jié)果,一般放在批處理文件第一行。
echo 日志參數(shù):用于在控制臺(tái)輸出日志,偏于理解腳本執(zhí)行邏輯
::/rem 注釋內(nèi)容:注釋內(nèi)命令
title/color:設(shè)置窗體標(biāo)題和背景顏色
cd:切換目錄
md:創(chuàng)建目錄
dir:顯示文件夾的內(nèi)容
rd:刪除一個(gè)目錄
del 刪除模式 文件:刪除文件。通過(guò)配置刪除模式,可以刪除任意文件,包含隱藏、只讀、系統(tǒng)文件
copy:拷貝文件
pause:暫停命令,一般放在批處理文件最后一行
goto:跳轉(zhuǎn)命令,一般和「 : 任務(wù)名稱 」搭配使用,執(zhí)行一個(gè)循環(huán)任務(wù),實(shí)例見(jiàn)第 3 節(jié)
for:循環(huán)命令,和 Python 中的 for 語(yǔ)法類(lèi)似
if:判斷命令
set:設(shè)置一個(gè)變量
start:調(diào)用外部程序的命令
3. 實(shí)用場(chǎng)景
下面聊聊幾個(gè)批處理比較實(shí)用的場(chǎng)景:
1、對(duì)文件夾或桌面下的文件進(jìn)行分類(lèi),然后放置到不同的文件夾內(nèi),方便歸納管理
- @echo off
- for %%i in (*) do (md %%~xi
- move *%%~xi %%~xi)
- pause
你沒(méi)看錯(cuò),只需要 4 行代碼其中,for 用于遍歷當(dāng)前文件夾,遍歷的結(jié)果用 do 分別去執(zhí)行后面的命令%%~xi 是截取 %%i 的擴(kuò)展名,使用 md 命令新建一個(gè)文件夾move 的作用是:將源文件移動(dòng)到新的文件夾中。
2、刪除當(dāng)前目錄(包含子目錄)下所有的 build 文件夾
使用 Android Studio 編譯后,如果項(xiàng)目存在多個(gè) Module,可能會(huì)存在多個(gè) build 文件夾,可以使用下面的批處理腳本一鍵刪除。
- @echo off
- :: 打開(kāi)到當(dāng)前目錄下
- cd /d "%~dp0"
- echo 開(kāi)始刪除
- :: 循環(huán)刪除
- for /r /D %%i in (*build*) do rd /s /q "%%i"
- echo 刪除完成
- pause
腳本很簡(jiǎn)單,只需要打開(kāi)項(xiàng)目根目錄,利用「 for + do 」循環(huán)遍歷,根據(jù)匹配規(guī)則刪除文件即可。
其中:%~dp0:批處理文件當(dāng)前目錄/s:從所有子目錄下刪除文件。
/q:指定以「 安靜模式 」執(zhí)行刪除操作,刪除不需要確認(rèn)相比 Python 腳本,批處理腳本代碼更簡(jiǎn)潔。
3、執(zhí)行 Python 腳本定時(shí)任務(wù)
比如,我編寫(xiě)完一個(gè) Python 采集爬蟲(chóng),我想 5 分鐘執(zhí)行一次,這里可以使用 goto 命令。
- @echo off
- title 循環(huán)運(yùn)行Python代碼
- :: 5分鐘執(zhí)行一次,單位為s
- set INTERVAL=300
- :: 提前執(zhí)行一次,把執(zhí)行時(shí)間打印出來(lái)
- echo 開(kāi)始執(zhí)行 - %time%
- python C:/test.py
- :: 使用timeout進(jìn)行倒計(jì)時(shí)
- timeout %INTERVAL%
- :: 新建一個(gè)任務(wù)
- :Task
- echo 開(kāi)始執(zhí)行 - %time%
- python C:/test.py
- timeout %INTERVAL%
- :: 使用goto命令,開(kāi)始跳轉(zhuǎn)到上面的任務(wù),開(kāi)始執(zhí)行
- goto Task
4、Git 提交代碼
正常使用 git 命令行提交代碼( 不使用 IDE ),需要使用 git add .、git commit -m 提交日志、git pull、git push 四條命令。
使用批處理腳本,只需要雙擊一下,輸入提交日志就完事了。
具體代碼如下:
- @echo off
- title 提交代碼
- echo 提交代碼,簡(jiǎn)化操作
- :: 狀態(tài)
- git status
- :: set:等待輸入,賦值給變量msg
- set /p commit_msg=代碼提交注釋?zhuān)?nbsp;
- :: 提交代碼的 4 條命令
- git add .
- git commit -m %commit_msg%
- git pull
- git push
- echo 提交成功
- pause
5、清除系統(tǒng)垃圾文件
指定刪除模式、待刪除的路徑,調(diào)用 del 命令去刪除即可。
- @echo off
- :: 配置
- title Alic Feng batTool for Clean
- color 03
- mode con cols=42 lines=20
- echo executes cleaning,Please waiting...
- ::程序刪除系統(tǒng)無(wú)用文件開(kāi)始
- del /f /s /q %systemdrive%\*.tmp 1>nul 2>nul
- del /f /s /q %systemdrive%\*._mp 1>nul 2>nul
- del /f /s /q %systemdrive%\*.log 1>nul 2>nul
- del /f /s /q %systemdrive%\*.gid 1>nul 2>nul
- del /f /s /q %systemdrive%\*.chk 1>nul 2>nul
- del /f /s /q %systemdrive%\*.old 1>nul 2>nul
- del /f /s /q %systemdrive%\recycled\*.* 1>nul 2>nul
- del /f /s /q %windir%\*.bak 1>nul 2>nul
- del /f /s /q %windir%\prefetch\*.* 1>nul 2>nul
- del /f /s /q %windir%\temp\*.* 1>nul 2>nul
- del /f /q %userprofile%\cookies\*.* 1>nul 2>nul
- del /f /q %userprofile%\recent\*.* 1>nul 2>nul
- del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*" 1>nul 2>nul
- del /f /s /q "%userprofile%\Local Settings\Temp\*.*" 1>nul 2>nul
- del /f /s /q "%userprofile%\recent\*.*" 1>nul 2>nul
- ::刪除系統(tǒng)垃圾文件結(jié)束
- echo 清除系統(tǒng)垃圾完成?。?!
- echo. & pause
4. 最后
上面幾個(gè)簡(jiǎn)單的小功能都是使用批處理腳本編寫(xiě)的,實(shí)際上,Python 與批處理各有各的優(yōu)勢(shì)。
Python 語(yǔ)法更加優(yōu)雅易懂,大量的依賴庫(kù)可以直接使用;批處理在 PC 端某些特點(diǎn)的場(chǎng)景,無(wú)論是編寫(xiě)還是使用,都有它特定的優(yōu)勢(shì)。
當(dāng)然,可以使用轉(zhuǎn)換工具將批處理腳本轉(zhuǎn)為 EXE 可執(zhí)行程序,供 Python 去調(diào)用,完成一些復(fù)雜的自動(dòng)化任務(wù)。