用批处理文件备份hexo博客到本地目录


hexo在折腾过程,难免会出现数据丢失的问题,有不少备份的方案,但在windows上最简单的就是压缩后复制到指定目录。可复制到onedrive目录下,会自动备份到云端。

主代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@echo off
setlocal enabledelayedexpansion

:: 配置参数
set "SOURCE_DIR=D:\HexoBlog" :: Hexo博客根目录
set "BACKUP_DIR=D:\BlogBackups" :: 备份存放目录
set "IGNORE_DIRS=node_modules public .deploy_git" :: 要忽略的目录(空格分隔)
set "ZIP_NAME=HexoBackup_%date:~0,4%%date:~5,2%%date:~8,2%.zip" :: 压缩文件名(带日期)

:: 创建临时工作目录
set "TEMP_DIR=%TEMP%\HexoBackupTemp"
if exist "%TEMP_DIR%" rd /s /q "%TEMP_DIR%"
mkdir "%TEMP_DIR%"

:: 复制文件,排除指定目录
echo 正在复制文件...
for /d %%d in ("%SOURCE_DIR%\*") do (
set "skip="
for %%i in (%IGNORE_DIRS%) do (
if /i "%%~nxd"=="%%i" set skip=1
)
if not defined skip (
xcopy /E /I /Y "%%d" "%TEMP_DIR%\%%~nxd"
)
)

:: 复制单独的文件(非目录)
for %%f in ("%SOURCE_DIR%\*.*") do (
if not "%%~nxf"==".gitignore" ( :: 可以添加其他要排除的文件
copy /Y "%%f" "%TEMP_DIR%\" >nul
)
)

:: 创建备份目录(如果不存在)
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

:: 压缩文件
echo 正在压缩备份文件...
powershell -nologo -noprofile -command "Add-Type -Assembly 'System.IO.Compression.FileSystem'; [System.IO.Compression.ZipFile]::CreateFromDirectory('%TEMP_DIR%', '%BACKUP_DIR%\%ZIP_NAME%', 'Optimal', $false)"

:: 清理临时文件
rd /s /q "%TEMP_DIR%"

echo 备份完成!备份文件保存在: %BACKUP_DIR%\%ZIP_NAME%
pause

以ansi编码保存为backup_hexo.bat。

使用说明

配置参数:

  • 修改 SOURCE_DIR 为Hexo博客根目录;
  • 修改 BACKUP_DIR 为存放备份的目录;
  • 修改 IGNORE_DIRS 为忽略的目录(默认忽略了 node_modules、public 和 .deploy_git)。

功能说明

  • 脚本会创建一个临时目录复制所有文件(排除指定目录);
  • 使用PowerShell的压缩功能创建ZIP文件;
  • 备份文件名包含当前日期(如 HexoBackup_20230515.zip);
  • 完成后自动清理临时文件。

注意事项

  • 需要Windows 8/Server 2012或更高版本(支持PowerShell压缩命令);
  • 如果使用Windows 7,需要安装.NET Framework 4.5或更高版本;

7zip压缩方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
setlocal

:: 配置参数
set "SOURCE_DIR=D:\Hexo\Blog"
set "BACKUP_DIR=D:\BlogBackups"
set "SEVEN_ZIP=C:\Program Files\7-Zip\7z.exe"

:: 创建临时排除列表文件
set "EXCLUDE_LIST=%temp%\exclude.txt"
(
echo node_modules\*
echo public\*
echo .deploy_git\*
echo .github\*
) > "%EXCLUDE_LIST%"

:: 执行压缩
"%SEVEN_ZIP%" a -t7z -mx9 "%BACKUP_DIR%\HexoBackup_%date:~0,4%%date:~5,2%%date:~8,2%.7z" "%SOURCE_DIR%\*" -x@"%EXCLUDE_LIST%"

:: 清理
del "%EXCLUDE_LIST%"

echo 备份完成!
pause

不使用powershell压缩,改为7zip。最后生成的文件差不多大小。