:backup_task
cls
color 1f
title 文件备份器-已存在的备份任务
echo.
at
echo -------------------------------------------------------------------------------
echo.
echo ╔══════════════════════════════╗
echo ║ 如果要停止某个备份任务,请输入该任务的ID号,然后按回车即可 ║
echo ║ ║
echo ║ 多个ID号之间用空格分隔,停止所有计划任务请按 A ║
echo ║ ║
echo ║ 退出请按 0 ,返回上一步请按除0、A和ID数字之外的任意键 ║
echo ╚══════════════════════════════╝
echo.
set ID=
set /p ID= 请输入不再需要的备份任务的ID:
if "%ID%"=="0" exit
if /i "%ID%"=="a" at /delete /yes && (call :del_nouse && goto backup_task)
:: 以下语句的作用是:如果停止了某项备份任务,则检查硬盘上由本程序生成的bat文件中,
:: 不在at任务列表中的有哪些;如果有,则删除该bat,同时删除注册表中对应的字符串值;
:: 如果没有,则不作任何删除操作;
(for %%i in (%ID%) do at %%i /del /yes >nul 2>nul) && (
call :del_nouse
goto backup_task
) || goto input_source
rem =======输入文件保存路径并检测输入是否正确=======
:input_destination
cls
color 1f
title 文件备份器-请输入目标文件路径
echo.
echo.
echo ╭────────╮
echo ╭─────────┤ 选择保存位置 ├─────────╮
echo │ ╰────────╯ │
echo │ 操作说明: │
echo │ │
echo │ 请输入保存位置的绝对路径或者相对路径 │
echo │ │
echo │ (注意:必须在半角状态下输入冒号和反斜杠; │
echo │ │
echo │ 请勿输入非法的路径名符号),或者把一个已 │
echo │ │
echo │ 存在的文件夹拖曳至本窗口,然后回车确认。 │
echo │ │
echo │ ╭────────────────╮ │
echo ╰─────┤ 查看各磁盘分区剩余空间请按 9 ├─────╯
echo ╰────────────────╯
echo.
echo 返回上一步请按 1 退出请按 0
echo ──────────────────────────────
echo.
set destination=:
set /p destination= 请输入备份文件的保存路径:
set "destination=%destination:"=%"
:: 上面这句为判断%destination%中是否存在引号,有则剔除
if "%destination%"==":" goto input_destination
if "%destination%"=="0" exit
if "%destination%"=="1" goto input_source
if "%destination%"=="9" goto freesize
:: 下面一句针对文件或文件夹取保存位置的文件名
for /d %%i in ("%source%.*") do set destination=%destination%%%~nxi
for %%i in ("%destination%") do set destination=%%~fi
set subarea=%destination:~0,1%
for %%i in ("%destination%") do if "%%~fi"=="%%~di" goto forbid_to_build_1
echo "%destination%" | findstr /i /c:"%source%" && goto forbid_to_build_2
if not exist %subarea%:nul goto subarea_noexist
:: 下面一句取日志名为要备份文件(夹)的文件名
for %%i in ("%source%") do set name_log=%%~ni
if exist "%destination%%name_log%_log.log" goto whether_add
if exist "%destination%" goto whether_over









