楠木軒

這些自動化場景,批處理腳本完全可以取代 Python

由 卯秀珍 發佈於 科技

一. 寫在前面

提到自動化解決方案,相信大部分人會想到用 Python 語言,只需要根據功能場景,編寫 Python 腳本即可

相反,PC 端的 Batch 批處理 似乎快被忘記了,很多人對它嗤之以鼻,認為這麼古老的腳本語言貌似沒什麼用,Python 似乎可以取而代之

相比 Python 腳本,Batch 批處理腳本在某些場景下,使用更簡潔、方便、高效,即寫即用,不需要依賴 Python 環境,並且可以完全擺脱打包等繁瑣步驟

二. 批處理基礎

新建批處理腳本很簡單,只需要新建一個文本文件,然後修改編碼方式為:ANSI 編碼,接着編寫腳本邏輯代碼,最後保存文件以 .bat 結尾即可

Batch 常用命令包含:echo、::/rem、title/color、cd/md/dir、rd/del/copy、pause、goto、for、if、set、start等

其中:

@echo off 代表在本行開始關閉回顯,不顯示正在執行的批處理命令及執行結果,一般放在批處理文件第一行

echo 日誌參數:用於在控制枱輸出日誌,偏於理解腳本執行邏輯

::/rem 註釋內容:註釋內命令

title/color:設置窗體標題和背景顏色

cd:切換目錄

md:創建目錄

dir:顯示文件夾的內容

rd:刪除一個目錄

del 刪除模式 文件:刪除文件。通過配置刪除模式,可以刪除任意文件,包含隱藏、只讀、系統文件

copy:拷貝文件

pause:暫停命令,一般放在批處理文件最後一行

goto:跳轉命令,一般和「 : 任務名稱 」搭配使用,執行一個循環任務,實例見第 3 節

for:循環命令,和 Python 中的 for 語法類似

if:判斷命令

set:設置一個變量

start:調用外部程序的命令

三. 實用場景

下面聊聊幾個批處理比較實用的場景:

1、對文件夾或桌面下的文件進行分類,然後放置到不同的文件夾內,方便歸納管理

@echo offfor %%i in (*) do (md %%~xi move *%%~xi %%~xi)pause

你沒看錯,只需要 4 行代碼

其中,

for 用於遍歷當前文件夾,遍歷的結果用 do 分別去執行後面的命令

%%~xi 是截取 %%i 的擴展名,使用 md 命令新建一個文件夾

move 的作用是:將源文件移動到新的文件夾中

2、刪除當前目錄(包含子目錄)下所有的 build 文件夾

使用 Android Studio 編譯後,如果項目存在多個 Module,可能會存在多個 build 文件夾,可以使用下面的批處理腳本一鍵刪除

@echo off:: 打開到當前目錄下cd /d "%~dp0"echo 開始刪除:: 循環刪除for /r /D %%i in (*build*) do rd /s /q "%%i"echo 刪除完成pause

腳本很簡單,只需要打開項目根目錄,利用「 for + do 」循環遍歷,根據匹配規則刪除文件即可

其中:

%~dp0:批處理文件當前目錄

/s:從所有子目錄下刪除文件

/q:指定以「 安靜模式 」執行刪除操作,刪除不需要確認

相比 Python 腳本,批處理腳本代碼更簡潔

3、執行 Python 腳本定時任務

比如,我編寫完一個 Python 採集爬蟲,我想 5 分鐘執行一次,這裏可以使用 goto 命令

@echo off  title 循環運行Python代碼:: 5分鐘執行一次,單位為sset INTERVAL=300:: 提前執行一次,把執行時間打印出來echo 開始執行 - %time%python C:/test.py :: 使用timeout進行倒計時timeout %INTERVAL%:: 新建一個任務:Task  echo 開始執行 - %time%python C:/test.py timeout %INTERVAL%:: 使用goto命令,開始跳轉到上面的任務,開始執行goto Task  

4、git 提交代碼

正常使用 git 命令行提交代碼( 不使用 IDE ),需要使用 git add .、git commit -m 提交日誌、git pull、git push 四條命令

使用批處理腳本,只需要雙擊一下,輸入提交日誌就完事了

具體代碼如下:

@echo offtitle 提交代碼echo 提交代碼,簡化操作:: 狀態git status:: set:等待輸入,賦值給變量msgset /p commit_msg=代碼提交註釋::: 提交代碼的 4 條命令git add .git commit -m %commit_msg%git pullgit pushecho 提交成功pause 

5、清除系統垃圾文件

指定刪除模式、待刪除的路徑,調用 del 命令去刪除即可

@echo off:: 配置title Alic Feng batTool for Cleancolor 03mode con cols=42 lines=20echo executes cleaning,Please waiting...::程序刪除系統無用文件開始del /f /s /q  %systemdrive%\*.tmp 1>nul 2>nuldel /f /s /q  %systemdrive%\*._mp 1>nul 2>nuldel /f /s /q  %systemdrive%\*.log 1>nul 2>nuldel /f /s /q  %systemdrive%\*.gid 1>nul 2>nuldel /f /s /q  %systemdrive%\*.chk 1>nul 2>nuldel /f /s /q  %systemdrive%\*.old 1>nul 2>nuldel /f /s /q  %systemdrive%\recycled\*.* 1>nul 2>nuldel /f /s /q  %windir%\*.bak 1>nul 2>nuldel /f /s /q  %windir%\prefetch\*.* 1>nul 2>nuldel /f /s /q %windir%\temp\*.* 1>nul 2>nuldel /f /q  %userprofile%\cookies\*.* 1>nul 2>nuldel /f /q  %userprofile%\recent\*.* 1>nul 2>nuldel /f /s /q  "%userprofile%\Local Settings\Temporary Internet Files\*.*" 1>nul 2>nuldel /f /s /q  "%userprofile%\Local Settings\Temp\*.*" 1>nul 2>nuldel /f /s /q  "%userprofile%\recent\*.*" 1>nul 2>nul::刪除系統垃圾文件結束echo 清除系統垃圾完成!!!echo. & pause

四. 最後

上面幾個簡單的小功能都是使用批處理腳本編寫的,實際上,Python 與批處理各有各的優勢。

Python 語法更加優雅易懂,大量的依賴庫可以直接使用;批處理在 PC 端某些特點的場景,無論是編寫還是使用,都有它特定的優勢。

當然,可以使用轉換工具將批處理腳本轉為 EXE 可執行程序,供 Python 去調用,完成一些複雜的自動化任務。