bat脚本更新本地Git仓库

bat脚本更新本地Git仓库

回到家从远程拉代码的时候觉得每次都要输入指令很麻烦,突然想到既然每次执行的命令都一致,是否可以写一个脚本来实现自动拉取,查询网络后编写如下简易版脚本:

echo off
for /d %%i in (*) do (
cd %%i
IF EXIST .git (
echo %%i
git pull
echo.
)
cd ..
) 

主要的步骤就是遍历脚本当前所在的目录下的子目录,判断如果存在.git文件就执行git pull的命令,拉取远程分支

这个脚本文件必须放在项目外层目录下,如果想放在任意地方,需要指定目录,可以把*替换成对应的路径,改成这样:

echo off
for /d %%i in (D:\Data\Projects\Personal\*) do (
cd %%i
IF EXIST .git (
echo %%i
git pull
echo.
)
cd ..
) 

总结一下bat脚本遍历文件夹的方法

命令:for [参数] %%变量名 in (匹配符) do (执行的命令)

切记:每个指令之间必须以空格隔开,in 与 ( 之间有空格,do 与 ( 间也有空格,否则命令会无法成功执行;

[]:表示此项指令为可选
[参数]:参数取值一共有四种: /d, /r, /l, /f,加上无参数,所以一共五种场景:

  • 无参:遍历当前路径的文件夹下的文件,但也可在(匹配符)中指定路径;
  • /d:遍历当前路径的文件夹下的文件夹,但也可在(匹配符)中指定路径;
  • /r [路径]:深度遍历指定路径下的所有文件,子目录中的文件也会被遍历到,如果没指定路径,默认当前路径;
  • /l :当使用参数 /l 时,需结合(匹配符)一起使用,此时 () 括号内部的用法规则为:(start, step, end),此时的 for 命令作用等同于 java 语言中的 for 语句;
  • /f :用于解析文件中的内容;

**%%变量名:**作用类似于 for(int i = 0; ; ) 中的 int i = 0,有些区别点的就是,批处理的 for 循环遍历每一个子项时,%%变量名 <=> 每个子项,即 &&变量名 已经是指向具体的每个子项了;

**(匹配符):**在 in 指令之后 () 括号里的内容可表示为通配符,用于按照指定的规则过滤文件夹下的文件,如 (*.txt) 表示遍历文件夹内所有以 .txt 结尾的文件;

**(执行的命令):**前面的指令就可以取到文件夹内指定的每个子项了,那么接下去要对每个子项如何操作,就在这里写,类似于 java 的 for 命令后的 {} 大括号的作用;

【使用示例】
1、
无参:for %%i in (*) do ( echo %%i )
效果:遍历当前目录下的所有文件;

2、
无参指定路径:for %%i in (c:\softwares\VisualBat\*.url) do ( echo %%i )
效果:遍历在(匹配符)中指定路径下的以 .url 结尾的文件;

3、
带参数 /d 指定路径:for /d %%i in (c:\softwares\VisualBat\*) do ( echo %%i )
效果:遍历指定目录下的所有文件夹,%%i 指向每个子文件夹的绝对路径;

4、
带参数 /r :for /r %%i in (*.url) do ( echo %%i )
效果:深度遍历当前路径下所有以 .url 结尾的文件,因为是深度遍历,因此 %%i 指向文件的绝对路径;

5、
带参数 /l :for /l %%i in (1, 1, 5) do ( echo %%i )
效果:等效于 java 中的 for (int i = 1; i <= 5; i++)语句,起始值,递增或递减,终止值都可自行设置;

6、
带参数 /d /r:for /d /r %%i in (*) do ( echo %%i )
效果:参数可结合使用,/d 表示遍历文件夹,/r 表示深度遍历,因此以上命令作用为深度遍历当前目录下的所有文件夹,包括子目录中的文件夹;

【文件特殊操作】

如果是在 for 命令中遍历了某个文件夹下的文件,那么此时可以通过一些特殊命令来获取这个文件的各种信息,示例:
@echo off
for %%i in (*.txt) do (
echo %%i
echo %%~fi
echo %%~di
echo %%~pi
echo %%~ni
echo %%~xi
echo %%~ti
echo %%~zi
)

解释: 在通过 for 命令遍历文件时,%%i 根据不同的 for 使用方式,内容也有所不同,在这种用法下,%%i 指向了当前目录下每个文件名,完整的文件名。那么,此时就可以通过一些特殊命令来取得文件的相关信息,比如:

%%~fi:表示获取该文件的绝对路径信息
%%~di:表示获取该文件所在的盘符
%%~pi:表示获取该文件的路径,不包含盘符的信息
%%~ni:表示获取该文件的文件名,不包含扩展名信息
%%~xi:表示获取该文件的扩展名
%%~ti:表示获取该文件的上次修改时间
%%~zi:表示获取该文件的大小

%%~nxi:表示获取该文件的文件名和扩展名,不包含盘符以及路径信息

参考资料:【批处理】批处理遍历指定文件夹下的文件 - uTank - 博客园 (cnblogs.com)

bat自动提交脚本

仿照着上面的样例,我又写了一个自动提交的脚本,这样就可以偷懒一键提交了(虽然这样不好)

echo off
echo ==============cutting line============== > D:\Data\Projects\Personal\commit.txt
set d=%date:~0,10%
set t=%time:~0,8%
echo %d% %t% auto commit start... >> D:\Data\Projects\Personal\commit.txt
for /d %%i in (D:\Data\Projects\Personal\*) do (
cd %%i
IF EXIST .git (
echo %%i >> D:\Data\Projects\Personal\commit.txt
git add -A >> D:\Data\Projects\Personal\commit.txt
git commit -m "bat script auto commit" >> D:\Data\Projects\Personal\commit.txt
git pull >> D:\Data\Projects\Personal\commit.txt
git push >> D:\Data\Projects\Personal\commit.txt
echo ---------------------------------------- >> D:\Data\Projects\Personal\commit.txt
echo. >> D:\Data\Projects\Personal\commit.txt
)
cd ..
) 
echo ==============cutting line============== >> D:\Data\Projects\Personal\commit.txt

提交过程记录到了本地一个文本里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值