Windows批处理脚本
用于数据库备份文件(.nb3)的自动归档与清理,核心逻辑是“保留最新N个文件,超量则移动/删除”。- 文档1:单目录备份管理脚本(可独立运行),负责单个“核心目录→归档目录”的文件转移与清理(核心目录超15个则移归档,归档目录超45个则删除)。
- 文档2:批量目录调度脚本,预定义组“核心目录|归档目录”对,循环调用文档1处理每组目录,实现多目录批量备份管理。
DBsyc_main.bat
@echo off
chcp 936 >nul 2>&1
setlocal enabledelayedexpansion
:: 目录对列表(核心目录|归档目录)
set "dir1=全路径备份目录1|全路径归档目录1"
set "dir2=全路径备份目录2|全路径归档目录2"
set "dir3=全路径备份目录3|全路径归档目录3"
set "dir4=全路径备份目录4|全路径归档目录4"
:: 循环调用单目录脚本(确保单目录脚本与当前脚本同目录)
call :call_single_dir "%dir1%"
call :call_single_dir "%dir2%"
call :call_single_dir "%dir3%"
call :call_single_dir "%dir4%"
echo.
echo ==============================================
echo 所有目录处理完成!
echo ==============================================
endlocal
::pause
exit /b
:: 子程序:调用单目录脚本
:call_single_dir
set "pair=%~1"
for /f "tokens=1,2 delims=|" %%a in ("%pair%") do (
set "core_path=%%a"
set "archive_path=%%b"
)
echo.
echo 调用单目录脚本处理:!core_path! → !archive_path!
call "全路径\单目录备份管理.bat" "!core_path!" "!archive_path!"
goto :eof
单目录备份管理.bat
@echo off
chcp 936 >nul 2>&1
setlocal enabledelayedexpansion
:: 接收主脚本传递的参数(核心路径、归档路径,已修正为W10_Dat)
set "core_path=%~1"
set "archive_path=%~2"
set "backup_ext=nb3" :: 备份文件扩展名
set "keep_core_num=15" :: 核心保留数
set "keep_archive_num=45" :: 归档保留数
:: 输出处理信息
echo.
echo ==============================================
echo 处理目录对:
echo 核心目录:"!core_path!"
echo 归档目录:"!archive_path!"
echo ==============================================
:: 1. 创建核心目录(不存在则创建)
if not exist "!core_path!\" (
echo [提示] 创建核心目录:!core_path!
mkdir "!core_path!" >nul 2>&1
if !errorlevel! neq 0 (echo [错误] 创建核心目录失败 & goto :eof)
)
:: 2. 创建归档目录(不存在则创建)
if not exist "!archive_path!\" (
echo [提示] 创建归档目录:!archive_path!
mkdir "!archive_path!" >nul 2>&1
if !errorlevel! neq 0 (echo [错误] 创建归档目录失败 & goto :eof)
)
:: 3. 核心目录:移动超量文件
set "file_count=0" & set "moved_count=0"
for /f "delims=" %%f in ('dir /b /a-d /o-d "!core_path!\*.%backup_ext%" 2^>nul') do (
set /a file_count+=1
if !file_count! gtr !keep_core_num! (
echo 移动旧备份:"%%f"
move /y "!core_path!\%%f" "!archive_path!\%%f" >nul
if !errorlevel! equ 0 (set /a moved_count+=1) else (echo [错误] 移动失败:"%%f")
)
)
if !file_count! equ 0 (echo [核心目录] 无 .%backup_ext% 文件) else (echo [核心目录] 共!file_count!个,移动!moved_count!个(保留!keep_core_num!个))
:: 4. 归档目录:删除超量文件
set "file_count=0" & set "deleted_count=0"
for /f "delims=" %%f in ('dir /b /a-d /o-d "!archive_path!\*.%backup_ext%" 2^>nul') do (
set /a file_count+=1
if !file_count! gtr !keep_archive_num! (
echo 删除旧归档:"%%f"
del /f /q "!archive_path!\%%f" >nul
if !errorlevel! equ 0 (set /a deleted_count+=1) else (echo [错误] 删除失败:"%%f")
)
)
if !file_count! equ 0 (echo [归档目录] 无 .%backup_ext% 文件) else (echo [归档目录] 共!file_count!个,删除!deleted_count!个(保留!keep_archive_num!个))
endlocal
exit /b
错误处理:创建目录失败会终止脚本;移动/删除文件失败时输出错误但继续处理;
编码依赖:需确保系统支持GBK编码(chcp 936),否则中文可能乱码;
参数传递:文档2调用文档1时,需确保文档1的路径正确。

文章评论