文章目錄
- 前言
- 一、操作方式
- 二、文件展示
- 三、分析代碼結構
- 四、代碼
- 五、需要注意的潛在問題
- 六、改進后的代碼
- 七、改進說明
- 八、感謝
前言
由于之前git服務部署在本地服務器,處于代碼安全角度考慮。領導讓我將所有的項目代碼手動物理備份一份并且發給他。
這種傻傻的操作太浪費時間了,所以我就寫了一個批處理腳本用來執行這種操作。
解決方案:遍歷一個包含項目名稱的數組,并對每個文件中的項目執行 git pull 操作。
一、操作方式
window 系統新建一個 txt 文件,然后把下面代碼粘貼進去,點擊執行就開始了。
二、文件展示
這個文件要和其他項目文件放在一個同級。
文件名要和執行腳本中的數組值保持一致。
三、分析代碼結構
首先,代碼開始處聲明了編碼為65001(UTF-8),并開啟了echo,顯示命令的輸出。然后定義了一個數組obj,包含7個項目名稱。通過循環遍歷數組,對每個項目切換到對應的目錄并執行git pull。
- 數組定義:使用set命令定義數組元素,索引從0到6。
- 循環邏輯:使用標簽:loopStart和goto實現循環,索引從0開始,直到等于數組長度時結束。
- 變量處理:使用for/f循環獲取數組元素的值,賦值給objCurrent。
- 目錄切換和git操作:cd到對應目錄并執行git pull。
- 索引遞增:每次循環后索引加1。
四、代碼
::代碼聲明編碼
chcp 65001
@echo on
::規定數組長度
set objLength=7
::給數組設值
set obj[0]=BasicFramework0
set obj[1]=BasicFramework1
set obj[2]=BasicFramework2
set obj[3]=BasicFramework3
set obj[4]=BasicFramework4
set obj[5]=BasicFramework5
set obj[6]=BasicFramework6::初始索引
set objIndex=0::循環
:loopStart
::判斷索引值是否大于數組長度,大于的話跳到結束,不大于的話繼續循環
if %objIndex% equ %objLength% goto end::初始化變量
set objCurrent=0
for /f "usebackq delims== tokens=1-2" %%i in (`set obj[%objIndex%]`) do (:: 賦值變量set objCurrent=%%j
):: 拉代碼
cd D:\git\%objCurrent%
git pull::索引+1
set /a objIndex=%objIndex% + 1
::繼續循環
goto loopStart:endpausecmd /k
五、需要注意的潛在問題
- 數組長度和索引是否正確處理,特別是當數組元素數量變化時。
- 目錄路徑是否正確,特別是如果項目目錄名稱包含空格或特殊字符時,是否需要引號。
- git命令的執行是否需要錯誤處理,例如網絡問題或權限問題。
六、改進后的代碼
chcp 65001 >nul
@echo off
setlocal enabledelayedexpansion:: 動態獲取數組長度
set objLength=0
for /f "tokens=2 delims==" %%a in ('set obj[') do set /a objLength+=1:: 帶進度條和錯誤處理的更新
set objIndex=0
:loopStart
if %objIndex% geq %objLength% goto :endcall :get_array_element objCurrent %objIndex%
echo [%time%] 正在更新:!objCurrent!cd /D "D:\git\!objCurrent!" 2>nul || (echo [錯誤] 目錄不存在:!objCurrent!goto :next
)git pull >> update.log 2>&1
if %errorlevel% neq 0 (echo [失敗] !objCurrent! >> error.log
) else (echo [成功] !objCurrent!
):next
set /a objIndex+=1
goto loopStart:end
echo 所有倉庫更新完成
pause
exit:: 獲取數組元素子程序
:get_array_element <return_var> <index>
set %1=!obj[%2]!
exit /b:: 顯示進度條子程序
:show_progress <percentage>
set /a width=40
set /a pos=%1*width/100
set bar=▓
call :build_bar %pos%
echo [進度:%1%%] [!bar!]
exit /b:build_bar
set bar=
set /a len=%1
for /l %%i in (1,1,%len%) do set bar=!bar!▓
exit /b
七、改進說明
- 自動檢測數組長度,無需手動維護objLength;
- 添加錯誤處理和日志記錄功能;
- 引入進度條可視化更新進度;
- 增強路徑處理安全性;
- 支持中文路徑和特殊字符;
- 添加時間戳記錄操作日志;
使用時只需維護 obj[n]=倉庫名 數組即可,腳本會自動處理后續更新操作。
八、感謝
如果覺得有用歡迎點贊關注收藏。
有問題私信我!!~~