当前位置: 首页 > 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: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

七、改进说明

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

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

八、感谢

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


http://www.mrgr.cn/news/98418.html

相关文章:

  • C++ Json-Rpc框架-3项目实现(2)
  • hive数仓要点总结
  • Apache Hive学习教程
  • [Dify] 使用 Docker 本地部署 Dify 并集成 Ollama 模型的详细指南
  • (2025亲测可用)Chatbox多端一键配置Claude/GPT/DeepSeek-网页端配置
  • Gitea 1.23.7 速配
  • 腾讯云golang一面
  • 批量归一化(Batch Normalization)原理与PyTorch实现
  • 用Webpack 基础配置快速搭建项目开发环境
  • Multisim使用教程详尽版--(2025最新版)
  • DICOM通讯(ACSE->DIMSE->Worklist)
  • Linux vagrant 导入ubuntu到virtualbox
  • spring-boot nacos
  • Java-面向对象
  • Uniapp: 大纲
  • One-Hot标签编码方法详解
  • STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)
  • 《高阶函数:把函数当玩具传来传去》
  • Linux命令-vim编辑
  • 第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解