📄 文件备份器v2.3修改版2.cmd
字号:
echo xcopy /c /e /h /i /g /q /r /s /x /y "%SourceFiles%" "%source%"^>nul 2^>nul
echo del /a /f "%source%\%name_log%_log.log"^>nul 2^>nul
)>>"%batch_directory%\%name%_revert.bat"
rem ========获取文件(夹)的属性=============
:get_attrib
:: 根据文件(夹)来取舍dir中的/s参数,以防%suorce%为文件时多列路径
:: 但是当%source%为文件的时候,dir /a /b "%source%"不会显示绝对路径
if "%folder%"=="yes" (set dir_='dir /a /b /s "%source%"') else (set dir_="%source%")
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (%dir_%) do (
set var=%%~ai
set attrib_=
if not "!var:~1,1!"=="-" set attrib_=+!var:~1,1!
if not "!var:~3,1!"=="-" set attrib_=!attrib_! +!var:~3,1!
if not "!var:~4,1!"=="-" set attrib_=!attrib_! +!var:~4,1!
if not "!attrib_!"=="" echo attrib !attrib_! "%%i">>"%batch_directory%\%name%_revert.bat"
)
:add_to_reg
cls
color 1f
title 文件备份器-开机自运行选项
echo.
echo ╭────────╮
echo ╭─────────┤ 开机自运行选项 ├─────────╮
echo │ ╰────────╯ │
echo │ 操作说明: │
echo │ │
echo │ 本操作即将把备份任务加入到开机自运行 │
echo │ │
echo │ 选项中。若要取消开机自运行功能,请在"开始 │
echo │ │
echo │ \运行"中输入"msconfig",打开"系统配置实用 │
echo │ │
echo │ 程序",在"启动"处取消以备份任务名称命名的 │
echo │ │
echo │ 启动项目,或者在注册表[HKEY_LOCAL_MACHINE\ │
echo │ │
echo │ SOFTWARE\Microsoft\Windows\CurrentVersion\ │
echo │ │
echo │ Run]下删除相应的字符串值。 │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 接受请直接敲回车 跳过请按 S
echo ──────────────────────────────
echo.
set choice=
set /p choice= 请输入操作代码(S/回车):
if /i "%choice%"=="s" goto run_at
rem ========在注册表中增添自启动项以便开机时自动备份=============
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v %name% /t REG_SZ /d "%batch_directory%\%name%_backup.bat" /f >nul 2>nul
:run_at
:: 强制启用计划任务服务
sc config Schedule start= AUTO >nul 2>nul
sc start Schedule>nul 2>nul
rem ==========导入at计划任务=========
for %%i in (%copytime%) do (
at %%i /every:%copydate% "%batch_directory%\%name%_backup.bat">nul 2>nul
)
attrib /s /d -s -r "%destination%\*.*">nul 2>nul
(
echo.
echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
echo.
echo 于%date% %time:~0,8%创建了备份任务
echo 备份对象:%source%
echo 备份文件保存位置:%destination%
echo 备份程序位置:%batch_directory%\%name%_backup.bat
echo 文件恢复程序位置:%batch_directory%\%name%_revert.bat
echo.
echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
echo.
echo ________________________________________________________________________________
)>>"%destination%\%name_log%_log.log"
cls
color 1f
title 文件备份器-备份中……
echo.
echo.
echo.
echo.
echo.
echo.
echo ╭────────╮
echo ╭─────────┤ 正在备份文件 ├─────────╮
echo │ ╰────────╯ │
echo │ 操作说明: │
echo │ │
echo │ 备份时间和文件大小、文件数量成正比,请 │
echo │ │
echo │ 耐心等待…… │
echo │ │
echo ╰────────────────────────────╯
xcopy /c /h /i /g /q /r %xcopy_parameter% /x /y "%source%" "%destination%">nul 2>nul
attrib /s /d +s +r "%destination%\*.*">nul 2>nul
:: 添加当计划任务出错时提交报告的功能
:: --------------------------------------------------------------------
:: 当使用计划任务让系统自动运行一些命令或程序时,如果运行时发生错误,
:: 在系统的默认设置里,计划任务不会提交错误报告。
:: 此设置就是让计划任务在出现错误时弹出提示信息。
:: 要禁用此功能,请删除注册表中SchedulingAgent下的 NotifyOnTaskMiss
:: --------------------------------------------------------------------
:: reg add HKLM\SOFTWARE\Microsoft\SchedulingAgent /v NotifyOnTaskMiss /t REG_DWORD /d 00000001 /f >nul 2>nul
cls
title 备份日志
echo.
echo.
type "%destination%\%name_log%_log.log"
echo.
echo.
echo.
echo 按任意键继续...
pause>nul
cls
title 备份任务列表
echo.
echo.
echo.
echo.
echo.
echo.
echo ________________________________________________________________________________
echo.
for %%i in (%copytime%) do (
echo 已经添加了每月^(周^) %copydate% 日 %%i 对"%source%"的备份任务
)
echo.
echo ________________________________________________________________________________
echo.
echo 如要继续添加备份任务,请输入 B ,其他任意键退出...
echo.
echo.
set again=
set /p again= 请选择下一步操作代码:
if /i "%again%"=="b" goto input_source
exit
rem ========删除不再使用的文件或目录=============
:del_nouse
:: 以下语句的作用是:如果停止了某项备份任务,则检查硬盘上由本程序生成的bat文件中,
:: 不在at任务列表中的有哪些;如果有,则删除该bat,同时删除注册表中对应的字符串值;
:: 如果没有,则不作任何删除操作;
:: 如果由本程序在%ProgramFiles%下创建的目录为空,则删除该目录
attrib -h -r -s "%ProgramFiles%\备份任务程序\*.bat">nul 2>nul
setlocal enabledelayedexpansion
for %%i in ("%ProgramFiles%\备份任务程序\*_backup.bat") do (
set full_name=%%i
set part_name=!full_name:~0,-11!
at|find /i "%%i">nul || find /i "Code by JM" "!part_name!*.bat">nul && (
del /f /q "!part_name!*.bat"
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v %%~fi /f >nul 2>nul
)
)
for %%i in ("%ProgramFiles%\备份任务程序\*.bat") do (
find /i "Code by JM" "%%i">nul && attrib +r "%%i"
)
if not exist "%ProgramFiles%\备份任务程序" goto :eof
dir /a /b "%ProgramFiles%\备份任务程序"|findstr .>nul || rd /q "%ProgramFiles%\备份任务程序"
goto :eof
:: ━━━━━━━━━━━━━━━━━以下代码为出错提示━━━━━━━━━━━━━━━━━
:system_error
cls
color 0c
title 文件备份器-操作系统不支持
echo.
echo.
echo.
echo.
echo.
echo.
echo ╭────────╮
echo ╭─────────┤ 操作系统不支持 ├─────────╮
echo │ ╰────────╯ │
echo │ │
echo │ │
echo │ 非常抱歉,该程序只能在XP环境下运行 │
echo │ │
echo │ 程序即将退出... │
echo │ │
echo ╰────────────────────────────╯
ping 127.1 -n 4 >nul && goto :eof
:popedom_error
cls
color 0c
title 文件备份器-权限不足
echo.
echo.
echo.
echo.
echo.
echo.
echo ╭────────╮
echo ╭─────────┤ 权限不足 ├─────────╮
echo │ ╰────────╯ │
echo │ │
echo │ │
echo │ │
echo │ 非常抱歉,当前用户权限太低,无法运行本程序 │
echo │ │
echo │ 请换用具备管理员组权限的其他用户帐号来运行 │
echo │ │
echo │ 按任意键退出... │
echo │ │
echo ╰────────────────────────────╯
pause>nul
goto :eof
:subarea_noexist
cls
color 0c
title 文件备份器-磁盘 "%subarea%" 不存在
echo.
echo.
echo.
echo.
echo.
echo ╭────────╮
echo ╭─────────┤ 磁盘分区不存在 ├─────────╮
echo │ ╰────────╯ │
echo │ │
echo │ │
echo │ 盘符为 %subarea% 的磁盘分区不存在 │
echo │ │
echo │ 按任意键返回上一步重新选择路径 │
echo │ │
echo ╰────────────────────────────╯
echo.
pause>nul
goto input_destination
:source_noexist
cls
color 0c
title 文件备份器-文件不存在
echo.
echo.
echo.
echo.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -