📄 文件备份器v2.3修改版2.cmd
字号:
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
:over_write
attrib /s /d -s -h -r "%destination%\*.*">nul 2>nul
rd /q /s "%destination%">nul 2>nul
md "%destination%">nul 2>nul
(echo.
echo 备份日志)>"%destination%\%name_log%_log.log"
attrib /s /d +s +r "%destination%\*.*">nul 2>nul
:input_date
cls
color 1f
title 文件备份器-请输备份入日期
echo ╭────────╮
echo ╭─────────┤ 请输入备份日期 ├─────────╮
echo │ ╰────────╯ │
echo │ │
echo │ 1.若在每月的某几天备份,请输入从1到31的任意 │
echo │ │
echo │ 数字,比如1,3,4;若只在每月1号备份,请输入"1,"; │
echo │ │
echo │ 2.若在每周的某几天备份,请输入星期几的代码 │
echo │ │
echo │ (M,T,W,Th,F,S,Su);如果指定日期较多,在查看任务 │
echo │ │
echo │ 列表的时候,日期一栏将用省略号显示; │
echo │ │
echo │ 3.数字与字母不可混用;数字行或字母行首尾均无 │
echo │ │
echo │ 任何符号,其间用逗号分隔;请严格按照本格式填写! │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步请按 1 退出请按 0
echo ──────────────────────────────
echo 每天都备份请按 A
echo.
set copydate=
set /p copydate= 请输入备份日期:
if "%copydate%"=="" goto input_date
if "%copydate%"=="," goto input_date
if "%copydate%"=="0" exit
if "%copydate%"=="1" goto input_destination
if "%copydate%"=="1," goto input_time
if /i "%copydate%"=="a" goto all_date
:: 检查日期输入是否正确
set num=0
set char=%copydate%
for /f "tokens=1 delims=," %%i in ("%char%") do (
echo "%%i"|findstr /i "M T W Th F S Su">nul && goto check_alphabetical_date|| goto check_numerical_date
)
:check_alphabetical_date
call :check_alp
:loop_alp
set char=%char:*,=%
:check_alp
for /f "tokens=1 delims=," %%i in ("%char%") do (
echo "M T W Th F S Su"|findstr /i "%%i">nul || goto date_error
echo "%char%"|find ",">nul && goto loop_alp
)
goto input_time
:check_numerical_date
call :check_num
:loop_num
set /a num+=1
set char=%char:*,=%
:check_num
for /f "tokens=1 delims=," %%i in ("%char%") do set input=%%i
if %input% GTR 31 goto date_error
if %num% GTR 30 goto date_error
echo %char%|find ",">nul || if %num% LEQ 30 goto input_time || goto date_error
goto loop_num
:input_time
cls
color 1f
title 文件备份器-请输入时间
echo.
echo ╭────────╮
echo ╭─────────┤ 请输入备份时间 ├─────────╮
echo │ ╰────────╯ │
echo │ 操作说明: │
echo │ │
echo │ 请按格式输入备份时间,多个时间用空格 │
echo │ │
echo │ 分隔。该时间用24小时制(既从00:00到23:59) │
echo │ │
echo │ 的小时:分钟格式表示。 │
echo │ │
echo │ 例如:想分别在上午8点30分和下午4点进 │
echo │ │
echo │ 行备份,请在同一行输入8:30 16:00(注意:两 │
echo │ │
echo │ 个时间点之间有一个空格) │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步请按 1 退出请按 0
echo ──────────────────────────────
echo.
set copytime=
set /p copytime= 请输入备份时间:
if "%copytime%"=="" goto input_time
if "%copytime%"=="0" exit
if "%copytime%"=="1" goto input_date
:: 检查时间输入是否正确
for /f "tokens=*" %%i in ("%copytime%") do set char=%%i
call :check_time
set num=0
:back
set /a num+=1
set char=%char:* =%
:check_time
for /f "tokens=1,2 delims=:" %%i in ("%char%") do (
if %%i GTR 24 goto time_error
if %%j GTR 60 goto time_error
echo %char%|find " ">nul || goto input_name
)
goto back
rem =======输入备份任务名称=======
:input_name
cls
color 1f
title 文件备份器-备份任务名称
echo.
echo ╭────────╮
echo ╭─────────┤ 备份任务名称 ├─────────╮
echo │ ╰────────╯ │
echo │ 操作说明: │
echo │ │
echo │ 请输入备份任务的名称,然后回车确认。 │
echo │ │
echo │ 本程序将在"系统安装盘:\Program Files\备份 │
echo │ │
echo │ 任务程序"下生成"备份任务名称_backup.bat" │
echo │ │
echo │ 和"备份任务名称_revert.bat"这一对备份及恢 │
echo │ │
echo │ 复批处理。如需更改此备份任务的部分功能, │
echo │ │
echo │ 请用文本编辑工具对批处理文件进行编辑。 │
echo │ │
echo ╰────────────────────────────╯
echo.
echo 返回上一步请按 1 退出请按 0
echo ──────────────────────────────
echo.
echo.
set name=
set /p name= 请输入备份任务的名称:
if "%name%"=="" goto input_name
if "%name%"=="0" exit
if "%name%"=="1" goto input_time
if exist "%ProgramFiles%\备份任务程序\%name%_backup.bat" goto name_exist
call :list
echo ╔══════════════════════════════╗
echo ║ 退出请按 0 ,返回上一步请按 1 ,放弃并开始新的备份请按 B ║
echo ║ ║
echo ║ 继续下一步请按除0、1和B之外的任意键 ║
echo ╚══════════════════════════════╝
echo.
set choice=
set /p choice= 请选择操作代码(0/1/B/其他键):
if "%choice%"=="0" exit
if "%choice%"=="1" goto input_name
if /i "%choice%"=="b" (
attrib /s /d -s -h -r "%destination%\*.*">nul 2>nul
rd /q /s "%destination%">nul 2>nul
goto input_source
)
goto build_backup
:notice
cls
mode con lines=40
color 8e
title 文件备份器-注意事项
echo.
echo.
echo ╔══════════════════════════════════╗
echo ║ ║
echo ║ 1. 当程序提示某路径已存在时,强烈建议在作出覆盖操作前先查 ║
echo ║ ║
echo ║ 看该目录下的内容,以免程序错误删除该目录下的所有内容,给您带 ║
echo ║ ║
echo ║ 灾难性的损失。备份有风险,操作请谨慎! ║
echo ║ ║
echo ║ 2. 路径名中,除了允许冒号和反斜杠符号紧跟盘符之外,其他位 ║
echo ║ ║
echo ║ 置不能再含有半角状态下的以下11个符号,分别为:\、/、:、*、?、 ║
echo ║ ║
echo ║ "、<、>、(、)、|。输入其中任意一个符号,都会引起无法预料的错 ║
echo ║ ║
echo ║ 误;在本程序中,文件名的命名也应遵守以上规定! ║
echo ║ ║
echo ║ 3. 如果只输入"盘符+冒号"格式的路径,程序会把路径当作指定 ║
echo ║ ║
echo ║ 盘的当前路径来处理,而不是指定盘的根目录。比如:假设系统安装 ║
echo ║ ║
echo ║ 在C盘,在路径中只输入 C: ,则并不会认为是C盘根目录,而是C盘的 ║
echo ║ ║
echo ║ 当前路径,默认为"C:\ducuments and settings\当前用户名"; ║
echo ║ ║
echo ║ 4. 如果输入的路径不带盘符,则作为相对路径处理; ║
echo ║ ║
echo ║ 5. 本程序工作原理为:通过比较备份后文件与源文件的时间早晚 ║
echo ║ ║
echo ║ 来决定是否进行复制操作,因此,任何改动备份后文件修改时间的操 ║
echo ║ ║
echo ║ 作都会使程序不能及时更新源文件改动过的数据,请勿对备份后的文件 ║
echo ║ ║
echo ║ 进行改名、添加或删除子文件等操作! ║
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -