当前位置: 首页 > news >正文

批处理脚本bat丨遍历一个包含项目名称的数组,并对每个文件中的项目执行 git pull 操作 (一键拉很多文件的代码)

文章目录

  • 前言
  • 一、操作方式
  • 二、文件展示
  • 三、分析代码结构
  • 四、代码
  • 五、需要注意的潜在问题
  • 六、改进后的代码
  • 七、改进说明
  • 八、感谢


前言

由于之前git服务部署在本地服务器,处于代码安全角度考虑。领导让我将所有的项目代码手动物理备份一份并且发给他。
这种傻傻的操作太浪费时间了,所以我就写了一个批处理脚本用来执行这种操作。
解决方案:遍历一个包含项目名称的数组,并对每个文件中的项目执行 git pull 操作。
在这里插入图片描述

一、操作方式

window 系统新建一个 txt 文件,然后把下面代码粘贴进去,点击执行就开始了。

二、文件展示

这个文件要和其他项目文件放在一个同级。
在这里插入图片描述
文件名要和执行脚本中的数组值保持一致。
在这里插入图片描述

三、分析代码结构

首先,代码开始处声明了编码为65001(UTF-8),并开启了echo,显示命令的输出。然后定义了一个数组obj,包含7个项目名称。通过循环遍历数组,对每个项目切换到对应的目录并执行git pull。

  1. 数组定义:使用set命令定义数组元素,索引从0到6。
  2. 循环逻辑:使用标签:loopStart和goto实现循环,索引从0开始,直到等于数组长度时结束。
  3. 变量处理:使用for/f循环获取数组元素的值,赋值给objCurrent。
  4. 目录切换和git操作:cd到对应目录并执行git pull。
  5. 索引递增:每次循环后索引加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

:end

pause

cmd /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 :end

call :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

七、改进说明

  1. 自动检测数组长度,无需手动维护objLength;
  2. 添加错误处理和日志记录功能;
  3. 引入进度条可视化更新进度;
  4. 增强路径处理安全性;
  5. 支持中文路径和特殊字符;
  6. 添加时间戳记录操作日志;

使用时只需维护 obj[n]=仓库名 数组即可,脚本会自动处理后续更新操作。

八、感谢

如果觉得有用欢迎点赞关注收藏。
有问题私信我!!~~
谢谢

相关文章:

  • AI智能体生态革命:谷歌A2A协议如何重塑未来十年? ——当“安卓模式”撞上AI Agent,一场没有硝烟的战争开始了
  • 支付宝SEO全攻略:小程序搜索优化的系统方法与实践指南
  • Python文件操作完全指南:从基础到高级应用
  • 一文读懂WPF布局
  • 深度解读分销小程序商城源码系统:从搭建到运营的关键指南​​​​
  • IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程
  • 第一部分——Docker篇 第五章 容器编排
  • 汽车知识杂志社汽车知识编辑部汽车知识杂志2025年第4期目录
  • 2020 CCF CSP-S2.函数调用
  • IP属地和所在地不一致什么意思?怎么换成另外一个地方的
  • 【MATLAB第114期】基于MATLAB的SHAP可解释神经网络分类模型(敏感性分析方法)
  • [ctfshow web入门] web40
  • 【Kubernetes】Kubernetes 如何进行日志管理?Fluentd / Loki / ELK 适用于什么场景?
  • vue辅助工具(vue系列二)
  • MySQL8.0.31安装教程,附pdf资料和压缩包文件
  • 【Grok 大模型深度解析】第一期:技术溯源与核心突破
  • openEuler 24.03安装docker,docker compose
  • arthas之profiler火焰图基本使用和实践
  • Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台
  • 光谱相机的关键技术参数
  • 爱站权重查询/友链申请
  • 北京网站制作/安卓系统优化软件
  • 梭子手做鱼网站/网站开发建站
  • 跨境电商网店/seo自动发布外链工具
  • 网站没完成可以备案么/哈尔滨网络公司
  • wordpress子站点/绍兴seo优化