批处理脚本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.mzph.cn/pingmian/76654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C与C++、C++内存空间、堆与栈

C嘎嘎嘎嘎嘎~ C与C的区别与联系 C内存空间 int global_var; // 未初始化全局变量&#xff0c;BSS段 const char* str "Hello"; // 字符串常量text段 in数据段void func() {static int static_var; // 未初始化的静态变量&#xff0c;数据段int local_var; …

舵机:机器人领域的“关节革命者”

机器人的技术&#xff0c;每一个细微的进步都可能引领一场行业变革。而在这场变革中&#xff0c;舵机作为机器人关节的核心部件&#xff0c;正悄然上演着一场革命性的应用风暴。从简单的关节运动到复杂的姿态控制&#xff0c;舵机以其卓越的性能和无限的可能&#xff0c;重新定…

微前端的不断探索之路—— qiankun 实战与思考!

全文目录&#xff1a; 开篇语&#x1f4dd; 前言&#x1f6e0;️ 微前端是什么&#xff1f;为什么需要它&#xff1f;&#x1f4a1; 先从“前端痛点”说起&#x1f9d0; 微前端的优势 &#x1f939;‍♀️ qiankun 简介与核心概念&#x1f31f; 为什么选择 qiankun&#xff1f;…

拆解加密黑盒

在Web安全与数据爬取领域&#xff0c;JavaScript加密黑盒的逆向工程是核心技术之一。本文基于行业通用方法论与实战案例&#xff0c;提炼出一套标准化的五步逆向流程&#xff0c;涵盖目标定位、代码提取、逻辑分析、算法复现到自动化集成的全链路解决方案&#xff0c;帮助开发者…

IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程

随着人工智能技术的发展&#xff0c;AI 编程助手逐渐成为提升开发效率的强大工具。通义灵码是阿里云推出的一款 AI 编程助手&#xff0c;它能够帮助开发者实现智能代码补全、代码解释、生成单元测试等功能&#xff0c;极大地提升了编程效率和代码质量。 IntelliJ IDEA 是一款广…

Redis 特性和应用场景

1. Redis特性 1&#xff09;In-memory data structures Redis 在内存中存储数据&#xff0c;key 是 String&#xff0c; value 可以是 hash, list, set, sorted set, stream ... MySQL主要是通过 “表” 的方式来存储组织数据的 “关系型数据库” Redis主要是通过 “键值对”…

每天五分钟深度学习:非线性激活函数的导数

本文重点 本文探讨了神经网络中几种常见非线性激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Softmax)的导数特性。通过对各激活函数导数的数学推导与实际应用分析,揭示了不同激活函数在梯度传播、收敛速度及模型表达能力方面的差异。研究发现,ReLU及其变体在计算效率与…

redis哨兵机制 和集群有什么区别:

主从&#xff1a; 包括一个master节点 和多个slave节点&#xff1a; master节点负责数据的读写&#xff0c;slave节点负责数据的读取&#xff0c;master节点收到数据变更&#xff0c;会同步到slave节点 去实现数据的同步。通过这样一个架构可以去实现redis的一个读写分离。提升…

关于读完《毛泽东选集》的一些思考迭代

看完毛选前四卷&#xff0c;从革命初期一直讲到抗战胜利&#xff0c;共75.8W字&#xff0c;花费67个小时读完。从1925年发表的“中国社会各阶级的分析”&#xff0c;跨越100年&#xff0c;通过67个小时向主席学习到&#xff1a; 实事求是 从实践中来再到实践中去 用辩证与发展…

MySQL——MVCC(多版本并发控制)

目录 1.MVCC多版本并发控制的一些基本概念 MVCC实现原理 记录中的隐藏字段 undo log undo log 版本链 ReadView 数据访问规则 具体实现逻辑 总结 1.MVCC多版本并发控制的一些基本概念 当前读&#xff1a;该取的是记录的最新版本&#xff0c;读取时还要保证其他并发事务…

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法&#xff1a;让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块&#xff08;Super Bloc…

3 VS Code 配置优化与实用插件推荐:settings.json 详解、CodeGeeX 智能编程助手及插件离线安装方法

1 优化 settings.json 文件 1.1 settings.json 简介 settings.json 是 VS Code 的核心配置文件&#xff0c;用于存储用户的个性化设置和偏好。通过该文件&#xff0c;用户可以自定义和覆盖 VS Code 的默认行为&#xff0c;包括但不限于以下方面&#xff1a; 编辑器外观&#…

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识 1. 引言 在微服务架构中&#xff0c;分布式事务处理是一个复杂且常见的问题。随着业务规模的扩大&#xff0c;单体应用逐渐拆分为多个微服务&#xff0c;每个服务…

力扣面试150题--有效的数独

Day 19 题目描述 思路 其实还挺简单的&#xff0c;主要的难点在于如何判断每个小数独是否满足要求 详细见代码 class Solution {public boolean isValidSudoku(char[][] board) {HashSet<Character> set new HashSet<>();//处理行HashSet<Character> set1…

达梦数据库-学习-15-大内存SQL相关视图介绍

目录 一、环境信息 二、介绍 三、数据字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Co…

从0到1使用C++操作MSXML

1. 引言 MSXML&#xff08;Microsoft XML Core Services&#xff09;是微软提供的一套用于处理XML的COM组件库&#xff0c;广泛应用于Windows平台的XML解析、验证、转换等操作。本文将详细介绍如何从零开始&#xff0c;在C中使用MSXML解析和操作XML文件&#xff0c;包含完整的…

Windows 系统下用 VMware 安装 CentOS 7 虚拟机超详细教程(包含VMware和镜像安装包)

前言 资源 一、准备工作 &#xff08;一&#xff09;下载 VMware Workstation &#xff08;二&#xff09;下载 CentOS 7 镜像 二、安装 VMware Workstation&#xff08;比较简单&#xff0c;按下面走即可&#xff09; 三、创建 CentOS 7 虚拟机 四、安装 CentOS 7 系统…

应用安全系列之四十五:日志伪造(Log_Forging)之三

1、简介 针对Java的日志系统有多种&#xff0c;本文主要描述如何通过修改配置文件来解决logback和log4j的日志伪造问题。 2、logback 2.1、系统提供的解决方案 在logback.xml中配置编码器自动转义特殊字符&#xff1a; 复制 <configuration><appender name"C…

(五)循环链表、双向链表

循环链表 介绍 在单选链表基础上&#xff0c;下一个节点指向前一个节点&#xff0c;最后一个节点指向起点 封装循环链表 为了让循环链表可以继承自单向链表&#xff0c;对其进行重构 给其增加一个tail属性&#xff08;尾节点&#xff09;&#xff0c;对各方法进行重写整理 …

仙剑奇侠传98柔情版游戏秘籍

战斗秘技&#xff1a;在战斗中输入 “cheat”&#xff0c;然后输入 “v” 直接取胜&#xff1b;输入 “y” 敌人不攻击。另外&#xff0c;在战斗中按 “XJPXZ123” 加 “shift” 键&#xff0c;攻击力增加 1000&#xff05;。等级提升秘籍&#xff1a;当李逍遥等级到达 99 级时…