想法初衷

通过Windows的bat脚本一键化对hexo执行部署打包等相关命令


脚本代码

一键运行hexo n

在vscode中进行编辑,编辑完成后直接处理图片前缀后部署本地环境预览后发布

:: 防止中文乱码
chcp 65001

:: 不打印其他命令的回显(放在'@echo off'上此注释会被输出到控制台)
@echo off

:: 初始化参数配置
set BlogPath=D:\workSpace\Hexo\blog
echo 博客目录:%BlogPath%

set CopyFrom=D:\workSpace\Hexo\blog\source\_posts\
echo 复制目录:%CopyFrom%

set ParseTo=D:\workSpace\Vscode\
echo 粘贴目录:%ParseTo%

:: 配合'goto begin'回到此处重复执行操作
:: :begin

:: 获取输入
set input=
set /p input=请输入新增页面名称:

:: 去除输入的所有空格(因为空格会导致hexo n创建新页面失败)
set "input=%input: =%"

:: 打印用户输入参数
echo %input%

:: 执行cmd命令(cmd /c 表示执行完毕后关闭窗口)
start cmd /c "cd/d %BlogPath% && hexo n '%input%' "

:: 等待最长5s继续往下执行操作(原因:需要等待 hexo n 的文件创建好,然后执行复制操作!)
:: timeout /t 5 /nobreak > NUL

:: 复制创建文件到vscode工作目录下
:: copy %CopyFrom%%input%.md %ParseTo%

:: 创建空文件夹
:: md %ParseTo%%input%

:: 可配合':begin'进行重复执行操作
:: goto begin

:: 暂停
:: pause

:: 退出关闭窗口
exit

一键运行hexo s

:: 防止中文乱码
chcp 65001

@echo off

:: 获取最新代码(关闭自动更新)
:: start cmd /c "cd/d D:\workSpace\Blog\blog\themes\butterfly && git pull "
:: 清空public打包目录/打包资源/本地部署
start cmd /k "cd/d D:\workSpace\Hexo\blog && hexo clean && hexo g && hexo s"

一键部署github pages

原文件的编辑更新代码提交giteee信息规范即可,提交到github pages仓库部署的页面可随意。

:: 防止中文乱码
chcp 65001

@echo off

:: 初始化参数配置
set BlogDeployPath=D:\workSpace\Hexo\blog\.deploy\ODUODUOKE.github.io
set HexoPublicPath=D:\workSpace\Hexo\blog\public
set delBatName=del.bat

:: start cmd /c "cd/d %BlogDeployPath% && call %delBatName%"
:: timeout /t 5 /nobreak

start cmd /c "robocopy.exe %HexoPublicPath% %BlogDeployPath% /E /COPY:DAT /DCOPY:T"
timeout /t 5 /nobreak

start cmd /c "cd/d %BlogDeployPath% && git add . && git commit -m "update" && git push origin main && call %delBatName%"

提交推送

vscode编辑的原文件及资源,我提交的gitee
hexo打包的部署页面这个提交是github pages

vscode下文件提交git

安装git插件,直接在vscode中将相关文件提交至仓库

hexo下部署文件提交git

通过脚本推送部署,不需要人工干预

TODO

后续期望是通过一键脚本启动完服务后,通过curl监听到指定端口地址访问状态正常,然后启动浏览器(无需人工启动浏览器进行预览)。

其他

一键部署github pages注意事项

.gitgnore文件内容如下:

del.bat

del.bat 脚本命令代码

:: 防止中文乱码
chcp 65001

@echo off

:: 设置保护目录、文件参数配置
set defendDirName01=.git
set defendBatSelf01=del.bat
set defendBatSelf02=.gitignore


for /D %%i in (*) DO (
if not %%i==%defendDirName01% (
if not %%i==保留文件夹02(示例) (
rem echo 删文件夹:%%i
rd /S /Q %%i
)
)
)

for %%i in (*) DO (
if not %%i==%defendBatSelf01% (
if not %%i==%defendBatSelf02% (
rem echo 删除文件:%%i
del %%i
)
)
)

参考资料

bat批处理脚本中文乱码问题解决

.Bat之批处理实现手动输入变量参数

使用bat脚本自动打开cmd并执行命令

写一个打开cmd窗口并执行cmd命令的Windows脚本(.bat文件)

bat文件命令行去除变量的空格

Bat 等待一段指定的时间

Windows copy命令

bat 复制文件和文件夹(目录

BAT —- 删除部分文件和文件夹,仅保留指定文件、和文件夹

curl http_code 状态码

windows下bat脚本监听http服务

Curl学习日记2 - 在Windows CMD命令行中使用Curl


未使用,但是觉得以后会涉及,于是记录下来

在批处理(cmd,bat)下传递参数和获取参数


robocopy 的使用教程忘记留存链接下来了。

原本使用xcopy,经过测试发现复制过来的文件和原目录的文件里面多出来一个page文件夹和一个content.json (应该使我哪里步骤有问题导致的)。

备注: 如果复制到的目录下存在.git目录,文件会自动暂存区,导致我明明把目录下文件删除了,然后执行脚本复制好几次都失败!当时使用的xcopy,它输出日志100%copyied ,然后实际目录下是空的。