闲来无事写写小脚本
假设已经有一个脚本
@echo off
:START
:: 获取当前脚本的路径
cd /d %~dp0
:: 清空提交注释变量的值
set commit_msg=
:: 提示用户输入提交注释
set /p commit_msg=请输入提交注释(输入 n 退出):
:: 如果用户输入内容为 n,则退出脚本
if /i "%commit_msg%"=="n" (
exit
)
:: 如果用户没有输入内容,则使用默认的提交注释
if "%commit_msg%"=="" (
set "commit_msg=自动推送: %date:~0,10%,%time:~0,8%"
)
:: 自动提交
git init
git add .
git commit -m "%commit_msg%"
git push origin master
@echo 已经完成,
:: 回到第一步,让用户输入
goto START
用来做git自动推送的。现在我们希望稍微修改这个脚本,满足以下功能:
-
获取该bat脚本所在文件夹下的所有文件,以及所有子文件夹的所有文件的修改时间,取最新时间,记为last_mod_time.
-
每隔1秒,重新获取修改时间,记为mod_time
-
判断,如果mod_time>last_mod_time,这表示文件在最近出现了修改;于是,触发上面自动提交的脚本(此时直接提交即可,无需用户输入任何内容)
-
完成之后,将last_mod_time修改为mod_time
用windows下的bat文件来写:@echo on
setlocal enabledelayedexpansion:: 获取当前脚本的路径
cd /d %~dp0:: 初始化Git仓库(如果还没有初始化)
git init:MONITOR
:: 强行添加所有文件到暂存区
git add .:: 尝试提交更改,使用当前日期和时间作为提交信息,并将输出重定向到变量
set "commit_msg=自动推送: %date% %time%"
git commit -m "%commit_msg%" 2>&1 | find "nothing to commit, working tree clean" >nulif errorlevel 1 (
:: 如果有提交内容
echo 有更改提交,推送到远程仓库...
git push
echo 已经完成
) else (
:: 如果没有提交内容
echo 没有检测到更改,休息1秒后继续监控...
):: 等待1秒
timeout /t 1 >nul:: 继续监控
goto MONITOR
自动git pull
@echo on
:: 获取当前脚本的路径
cd /d %~dp0
:MONITOR
:: 从远程仓库拉取最新代码
git pull
:: 等待1秒
timeout /t 1 >nul
:: 继续监控
goto MONITOR