全自动数据强制备份程序,无视占用直接硬复制各种数据文件、文档、音视频、软件、数据库等的VSS卷拷贝批处理脚本程序,解放双手,一劳永逸

因为工作需要写了一个基于Windows系统平台VSS技术的文件强力文件复制程序,它的最大特点是可以复制正在运行中的文件甚至是被锁定的任何数据文件(一般正常复制会报文件占用的错误)适用于多方同时使用中的文件数据备份任务计划。

比如你是公司电脑管理员,你要对公司大家使用的共享数据做个紧急备份,但是里面有很多用户还在使用某些文件或者某些软件,通知协调又很麻烦,为了能快速并且无视用户占用情况下做紧急备份,用这种程序就再合适不过了,而且我为了数据备份后存储的安全性,又集成了调用RAR数据压缩的功能,全自动备份并打包成一个压缩包,让数据备份变的更加安全又方便转移,还有就是可以设定好任务计划,可以实现定期定时自动备份指定文件夹的文档、视频、音频、图片等等所有数据,包括局域网共享的文件,是不是感觉还不错呢?

来看看代码,首先是主程序(自动备份数据工具V2.0.cmd)脚本:

bash 复制代码
@echo off
title 自动备份数据工具V2.0
setlocal enabledelayedexpansion

:INIT
set "CONFIG_FILE=%~dp0Config.ini"
set "TASK_NAME=AutoBackupToolsTask"

:CHECK_CONFIG
if not exist "%CONFIG_FILE%" goto CREATE_CONFIG

for /f "tokens=1* delims=:" %%a in ('findstr /b "BackupFrom: BackupTo: BackupTime:" "%CONFIG_FILE%"') do (
    if "%%a"=="BackupFrom" set "BackupFrom=%%b"
    if "%%a"=="BackupTo" set "BackupTo=%%b"
    if "%%a"=="BackupTime" set "BackupTime=%%b"
)

rem 去除路径中的引号
set "BackupFrom=%BackupFrom:"=%"
set "BackupTo=%BackupTo:"=%"

if not defined BackupFrom set "BackupFrom=NOT SET"
if not defined BackupTo set "BackupTo=NOT SET"
if not defined BackupTime set "BackupTime=NOT SET"

:VALIDATE_PATHS
set "valid=1"
if not exist "!BackupFrom!" set "valid=0"
if not exist "!BackupTo!" set "valid=0"

:MENU_LOOP
cls
echo 当前配置为:
echo 要备份的文件夹:!BackupFrom!
echo 备份到的文件夹:!BackupTo!
echo 自动备份的时间:!BackupTime!
echo ===========================
echo 请选择操作:
echo 1.修改要备份的文件夹路径
echo 2.修改备份到的文件夹路径
echo 3.设定或创建自动备份计划
echo 4.删除创建的自动备份计划
echo 5.立即执行备份压缩任务
echo 6.立即退出备份程序
choice /c 123456 /n /m "请输入选择(1-6):"

if errorlevel 6 exit /b
if errorlevel 5 goto BACKUP_NOW
if errorlevel 4 goto DELETE_TASK
if errorlevel 3 goto CREATE_TASK
if errorlevel 2 goto SET_BACKUP_TO
if errorlevel 1 goto SET_BACKUP_FROM

:SET_BACKUP_FROM
set /p "newPath=请输入要备份的文件夹路径:"
if not exist "%newPath%" (
    echo 路径无效,请重新输入!
    timeout /t 3 >nul
    goto SET_BACKUP_FROM
)
set "BackupFrom=%newPath%"
goto UPDATE_CONFIG

:SET_BACKUP_TO
set /p "newPath=请输入备份到的文件夹路径:"
if not exist "%newPath%" (
    echo 路径无效,请重新输入!
    timeout /t 3 >nul
    goto SET_BACKUP_TO
)
set "BackupTo=%newPath%"
goto UPDATE_CONFIG

:UPDATE_CONFIG
rem 写入配置文件时添加引号
(
    echo BackupFrom:"%BackupFrom%"
    echo BackupTo:"%BackupTo%"
    echo BackupTime:"%BackupTime%"
) > "%CONFIG_FILE%"
goto MENU_LOOP

:CREATE_TASK
schtasks /delete /tn "%TASK_NAME%" /f >nul 2>nul
set /p "BackupTimeInput=设定每天自动执行备份的时间(如果是23:55就输入2355按回车键)请输入:"
rem 处理输入的时间,插入冒号
set "BackupTime=%BackupTimeInput:~0,2%:%BackupTimeInput:~2,2%"
schtasks /create /sc daily /st %BackupTime% /tn "%TASK_NAME%" /tr "\"%CD%\AutoBackupToolsTask.cmd\""
timeout /t 3 >nul
goto UPDATE_CONFIG

:DELETE_TASK
schtasks /delete /tn "%TASK_NAME%" /f >nul 2>nul && (
     echo 已删除计划任务
) || echo 未找到计划任务
timeout /t 3 >nul
goto MENU_LOOP

:BACKUP_NOW
echo 正在执行备份操作...
set "BackupFrom="
set "BackupTo="
for /f "tokens=1* delims=:" %%a in ('findstr /b "BackupFrom: BackupTo:" "%CONFIG_FILE%"') do (
    if "%%a"=="BackupFrom" set "BackupFrom=%%b"
    if "%%a"=="BackupTo" set "BackupTo=%%b"
)

rem 去除路径值中的引号
set "BackupFrom=%BackupFrom:"=%"
set "BackupTo=%BackupTo:"=%"

rem 检查 BackupFrom 和 BackupTo 是否有效
if not defined BackupFrom (
    echo 错误:未找到要备份的文件夹!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not exist "%BackupFrom%" (
    echo 错误:要备份的文件夹路径 "%BackupFrom%" 不存在!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not defined BackupTo (
    echo 错误:未找到备份到的文件夹路径(BackupTo)!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not exist "%BackupTo%" (
    echo 错误:备份到的文件夹路径 "%BackupTo%" 不存在!
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在初始化临时目录...
if not exist "%temp%\备份的数据" (
    md "%temp%\备份的数据" 2>nul || (
    echo 错误:无法创建临时目录!请检查temp文件夹权限。
    timeout /t 5 >nul
    goto MENU_LOOP
    )
)

echo 正在复制指定文件夹...
start "" /wait /min %~dp0shadowcopy.exe "%BackupFrom%\*.*" "%temp%\备份的数据" /s /i /y /J /R

if errorlevel 1 (
    echo 错误:文件复制失败!请检查 Shadowcopy 是否可用。
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在压缩要备份的文件夹...
set "timestamp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
set "timestamp=!timestamp: =0!"
start "" /wait "%~dp0WinRAR.exe" a -ibck -k -ep1 -m1 -r -s -inul -df "%BackupTo%\!timestamp!.rar" "%temp%\备份的数据"
if errorlevel 1 (
    echo 错误:压缩失败!请检查 WinRAR 是否可用。
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在清理临时文件...
del /f /q "%temp%\备份的数据\*.*" >nul 2>nul
rd /s /q "%temp%\备份的数据" >nul 2>nul

echo 恭喜!数据已备份完成!压缩后的文件夹已保存至:
echo %BackupTo%\!timestamp!.rar
echo 正在打开备份目录...
timeout /t 3 >nul
start "" "%BackupTo%"
timeout /t 3 >nul
goto MENU_LOOP

:CREATE_CONFIG
echo 首次运行,需要先初始化配置文件...
:INPUT_FROM
set "BackupFrom="
set /p "BackupFrom=请输入要备份的文件夹路径(例如:D:\MyFolder):"
if not defined BackupFrom (
    echo 输入不能为空!
    goto INPUT_FROM
)
if not exist "%BackupFrom%" (
    echo 错误:路径 "%BackupFrom%" 不存在!
    goto INPUT_FROM
)

:INPUT_TO
set "BackupTo="
set /p "BackupTo=请输入备份到的文件夹路径(例如:E:\Backup):"
if not defined BackupTo (
    echo 输入不能为空!
    goto INPUT_TO
)
if not exist "%BackupTo%" (
    echo 错误:路径 "%BackupTo%" 不存在!
    goto INPUT_TO
)

:INPUT_TIME
set "BackupTime="
set /p "BackupTimeInput=设定每天自动执行备份的时间(如果是23:55就输入2355按回车键)请输入:"
if not defined BackupTimeInput (
    echo 输入不能为空!
    goto INPUT_TIME
)
rem 处理输入的时间,插入冒号
set "BackupTime=%BackupTimeInput:~0,2%:%BackupTimeInput:~2,2%"

rem 强制生成配置文件(使用绝对路径)
(
    echo BackupFrom:"%BackupFrom%"
    echo BackupTo:"%BackupTo%"
    echo BackupTime:"%BackupTime%"
) > "%CD%\Config.ini"

if exist "%CD%\Config.ini" (
    echo.
    echo 配置文件创建成功!现在创建任务计划,请稍等...
    schtasks /create /sc daily /st %BackupTime% /tn "%TASK_NAME%" /tr "\"%CD%\AutoBackupToolsTask.cmd\""
    echo 任务计划创建成功!现在进入主菜单,请稍等...
    timeout /t 3 >nul
) else (
    echo 错误:无法生成配置文件!请检查当前文件夹权限。
    timeout /t 5 >nul
    exit /b
)
goto MENU_LOOP

接下来是任务计划调用的(AutoBackupToolsTask.cmd)脚本:

bash 复制代码
@echo off
setlocal enabledelayedexpansion

:INIT
set "CONFIG_FILE=%~dp0Config.ini"
set "TASK_NAME=AutoBackupToolsTask"

:CHECK_CONFIG
if not exist "%CONFIG_FILE%" goto CREATE_CONFIG

for /f "tokens=1* delims=:" %%a in ('findstr /b "BackupFrom: BackupTo: BackupTime:" "%CONFIG_FILE%"') do (
    if "%%a"=="BackupFrom" set "BackupFrom=%%b"
    if "%%a"=="BackupTo" set "BackupTo=%%b"
    if "%%a"=="BackupTime" set "BackupTime=%%b"
)

if not defined BackupFrom set "BackupFrom=NOT SET"
if not defined BackupTo set "BackupTo=NOT SET"
if not defined BackupTime set "BackupTime=NOT SET"

:VALIDATE_PATHS
set "valid=1"
if not exist "!BackupFrom!" set "valid=0" & set "BackupFrom=!BackupFrom!"
if not exist "!BackupTo!" set "valid=0" & set "BackupTo=!BackupTo!"

echo 正在执行备份操作...
set "BackupFrom="
set "BackupTo="
for /f "tokens=1* delims=:" %%a in ('findstr /b "BackupFrom: BackupTo:" "%CONFIG_FILE%"') do (
    if "%%a"=="BackupFrom" set "BackupFrom=%%b"
    if "%%a"=="BackupTo" set "BackupTo=%%b"
)

rem 去除路径值中的引号
set "BackupFrom=%BackupFrom:"=%"
set "BackupTo=%BackupTo:"=%"

rem 检查 BackupFrom 和 BackupTo 是否有效
if not defined BackupFrom (
    echo 错误:未找到要备份的文件夹!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not exist "%BackupFrom%" (
    echo 错误:要备份的文件夹路径 "%BackupFrom%" 不存在!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not defined BackupTo (
    echo 错误:未找到备份到的文件夹路径(BackupTo)!
    timeout /t 5 >nul
    goto MENU_LOOP
)
if not exist "%BackupTo%" (
    echo 错误:备份到的文件夹路径 "%BackupTo%" 不存在!
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在初始化临时目录...
if not exist "%temp%\备份的数据" (
    md "%temp%\备份的数据" 2>nul || (
    echo 错误:无法创建临时目录!请检查temp文件夹权限。
    timeout /t 5 >nul
    goto MENU_LOOP
    )
)

echo 正在复制指定文件夹...
start "" /wait /min %~dp0shadowcopy.exe "%BackupFrom%\*.*" "%temp%\备份的数据" /s /i /y /J /R

if errorlevel 1 (
    echo 错误:文件复制失败!请检查 Shadowcopy 是否可用。
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在压缩要备份的文件夹...
set "timestamp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
set "timestamp=!timestamp: =0!"
start "" /wait "%~dp0WinRAR.exe" a -ibck -k -ep1 -m1 -r -s -inul -df "%BackupTo%\!timestamp!.rar" "%temp%\备份的数据"
if errorlevel 1 (
    echo 错误:压缩失败!请检查 WinRAR 是否可用。
    timeout /t 5 >nul
    goto MENU_LOOP
)

echo 正在清理临时文件...
del /f /q "%temp%\备份的数据\*.*" >nul 2>nul
rd /s /q "%temp%\备份的数据" >nul 2>nul

再配合下面相应的程序,就可以实现了数据硬拷贝了。

经过测试这方法是可行的,我在这里提供创意思路,如果你对该程序感兴趣,我可以提供全套测试软件下载,只收取一点费用,如果你是高手动手能力强无需我提供,也可参照上图自行网络搜索下载,欢迎高手继续推演,感谢关注轶软工作室。

相关推荐
Antonio91532 分钟前
【音视频】封装格式与音视频同步
音视频
shenmu8442 分钟前
pt-archiver删除数据库的数据表/各种报错类型
数据库
EasyCVR1 小时前
安防监控/视频集中存储EasyCVR视频汇聚平台如何配置AI智能分析平台的接入?
人工智能·音视频·webrtc·rtsp·gb28181
weixin_519311741 小时前
3.多线程获取音频AI的PCM数据
人工智能·音视频·pcm
Dann Hiroaki2 小时前
文献分享: ConstBERT固定数目向量编码文档
数据库·机器学习·自然语言处理·nlp
黑风风2 小时前
探索 Ubuntu 中的 Hostname 配置与管理
数据库·ubuntu·php
rkmhr_sef4 小时前
MyBatis-Plus 自定义 SQL 和复杂查询
数据库·sql·mybatis
Craaaayon4 小时前
Docker基础-自定义镜像与容器网络
java·运维·网络·数据库·后端·docker·容器
茂桑4 小时前
记录一次Spring事务失效导致的生产问题
数据库
天地风雷水火山泽4 小时前
二百八十五、华为云PostgreSQL——建分区表并设置主键
数据库·postgresql·华为云