- @echo off
- setlocal
- setlocal enabledeayedexpansion
- title 设置备份任务
- echo ┏┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┓
- echo ┊ 对备份任务进行设置 ┊
- echo ┊author summerflower ┊
- echo ┊contact summerflower.zxm@google.com ┊
- echo ┊version 1.0 ┊
- echo ┊release 2010-02 ┊
- echo ┊ ┊
- echo ┊程序限制:至多可以处理999个任务 ┊
- echo ┗┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┛
- echo.
- set "freq=每天 每个星期 每个月 每3个月 每6个月"
- :inputmenu1
- echo ┌────────────────────┐
- echo │主菜单 │
- echo ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
- echo │ 1.添加新备份任务 │
- echo │ 2.删除备份任务 │
- echo └────────────────────┘
- set /p menu1=请输入你要进行的操作:
- if %menu1%==1 goto menu1_o1
- if %menu1%==2 goto menu1_o2
- echo 你的输入有误,请输入正确的选项
- goto inputmenu1
- rem menu1_o1开始。1.添加新备份任务
- :menu1_o1
- :inputmenu1_1
- echo ┌────────────────────┐
- echo │ 添加备份任务,请选择你要添加的任务类型 │
- echo ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
- echo │ 1.添加提示任务 │
- echo │ 2.添加复制任务 │
- echo └────────────────────┘
- set /p menu1_1=请输入你要进行的操作:
- if %menu1_1%==1 goto menu1_1_o1
- if %menu1_1%==2 goto menu1_1_o2
- echo 你的输入有误,请输入正确的选项
- goto inputmenu1_1
- rem menu1_1_o1开始。1.添加新备份任务→1.添加提示任务
- :menu1_1_o1
- echo 添加提示任务
- :inputname1
- set /p name=请输入名称:
- if not defined name (
- echo 名称不能为空
- goto inputname1
- )
- :inputMessage
- set /p message=请输入提示信息:
- if not defined message (
- echo 提示信息不能为空
- goto inputMessage
- )
- :inputmenu1_1_1
- echo ┌────────────────────┐
- echo │请输入你要提示的频率 │
- echo ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
- echo │ 1.每天 │
- echo │ 2.每个星期 │
- echo │ 3.每个月 │
- echo │ 4.每3个月 │
- echo │ 5.每6个月 │
- echo └────────────────────┘
- set /p menu1_1_1=请输入你要提示的频率:
- if %menu1_1_1%==1 (
- echo %name% 提示备份 %message% 每天>ini
- goto menu1_1_1end
- )
- if %menu1_1_1%==2 (
- echo %name% 提示备份 %message% 每个星期>>ini
- goto menu1_1_1end
- )
- if %menu1_1_1%==3 (
- echo %name% 提示备份 %message% 每个月>>ini
- goto menu1_1_1end
- )
- if %menu1_1_1%==4 (
- echo %name% 提示备份 %message% 每3个月>>ini
- goto menu1_1_1end
- )
- if %menu1_1_1%==5 (
- echo %name% 提示备份 %message% 每6个月>>ini
- goto menu1_1_1end
- )
- echo 你的输入有误,请输入正确选项
- goto inputmenu1_1_1
- :menu1_1_1end
- rem menu1_1_o1结束。1.添加新备份任务→1.添加提示任务
- goto menu1_1end
- rem menu1_1_o2开始。1.添加新备份任务→2.添加复制任务
- :menu1_1_o2
- echo ==========添加复制任务==========
- :inputname2
- set /p name=请输入名称:
- if not defined name (
- echo 名称不能为空
- goto inputname2
- )
- rem 把所有的文件和文件夹放入环境变量src中,以分号隔开。
- set src=
- :loopDrag
- set /p srctmp=请拖入源文件或文件夹:
- set srctmp=%srctmp:"=%
- if defined src (
- set src=%src%;%srctmp%
- ) else (
- set src=%srctmp%
- )
- rem 如果继续拖入选y,则跳到输入源文件或文件夹处,输入下一个源文件或文件夹
- set /p optConDrag=是否继续拖入?[y/n]
- if %optConDrag%==y goto loopDrag
- :inputDst
- set /p dst=请输入目标文件夹(必须是绝对路径):
- if defined dst (
- set dst=%dst:"=%
- ) else (
- echo 目标文件夹不能为空
- goto inputDst
- )
- :inputPreCopies
- rem 定义preCopies,它代表要保留的份数
- set /p preCopies=请输入要保留的份数:
- rem 检查preCopies输入是否正确,要求输入应该是一个合法数字。
- rem 循环截取preCopies中的每一个字符,检查它们是否为数字。
- rem 如果为不是数字,则表明输入的要保留的份数格式不正确,要求重新输入。
- rem digFlag用来标识输入是否合法。初始值为true,一旦有字符小于0或大于9,就将它的值设为false,并跳出循环。
- set cnt=0
- set digFlag=true
- :loopPreCopies
- echo 调试信息 用百分号引用结果是正确的 %preCopies%
- echo 调试信息 用感叹号引用不能输出环境变量preCopies的值 !preCopies!
- echo 调试信息 尝试从preCopies中获取一个字符,不能得到正确结果 !preCopies:~%cnt%,1!
- set strtmp=!preCopies:~%cnt%,1!
- if not defined strtmp goto loopPreCopiesEnd
- if %strtmp% lss 0 (
- set digFlag=false
- goto loopPreCopiesEnd
- )
- if %strtmp% gtr 9 (
- set digFlag=false
- goto loopPreCopiesEnd
- )
- set /a cnt+=1
- goto loopPreCopies
- :loopPreCopiesEnd
- if %digFlag%==true (
- set /a preCopies=%preCopies%
- ) else (
- echo 你的输入有误,请重新输入
- goto inputPreCopies
- )
- :inputmenu1_1_2
- echo ┌────────────────────┐
- echo │ 请输入你要备份的频率 │
- echo ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┤
- echo │ 1.每天 │
- echo │ 2.每个星期 │
- echo │ 3.每个月 │
- echo │ 4.每3个月 │
- echo │ 5.每6个月 │
- echo └────────────────────┘
- set /p menu1_1_2=请输入你要备份的频率:
- :inputmenu1_1_2
- if %menu1_1_2%==1 (
- set menu1_1_2freq=每天
- goto menu1_1_2_deal
- )
- if %menu1_1_2%==2 (
- set menu1_1_2freq=每个星期
- goto menu1_1_2_deal
- )
- if %menu1_1_2%==3 (
- set menu1_1_2freq=每个月
- goto menu1_1_2_deal
- )
- if %menu1_1_2%==4 (
- set menu1_1_2freq=每3个月
- goto menu1_1_2_deal
- )
- if %menu1_1_2%==5 (
- set menu1_1_2freq=每6个月
- goto menu1_1_2_deal
- )
- echo 你的输入有误,请输入正确的选项
- goto inputmenu1_1_2
- rem 将设置写入文件
- :menu1_1_2_deal
- set /p preext=请拖入你在此备份之前要执行的程序:
- if defined preext (
- set preext=!preext:"=!
- echo %name% 文件复制 %preCopies% %menu1_1_2freq% !preext!>>ini
- ) else (
- echo %name% 文件复制 %preCopies% %menu1_1_2freq%>>ini
- )
- set linecnt=0
- for /f %%a in (ini) do set /a linecnt+=1
- echo %dst%>>%menu1_1_2freq%%linecnt%
- set cnt=0
- :loopwholestring
- set srctmp=!src:~%cnt%,1!
- if not defined srctmp goto endwholestring
- if "%srctmp%"==";" (
- echo !src:~0,%cnt%!>>%menu1_1_2freq%%linecnt%
- set src=!src:~%cnt%!
- set src=!src:~1!
- set cnt=-1
- )
- set /a cnt+=1
- goto loopwholestring
- :endwholestring
- echo %src%>>%menu1_1_2freq%%linecnt%
- rem menu1_1_o2结束。1.添加新备份任务→2.添加复制任务
- goto menu1_1end
- :menu1_1end
- rem menu1_1结束。1.添加新备份任务
- goto end
- rem menu1_o2开始。2.删除备份任务
- :menu1_o2
- echo 删除备份任务
- if not exist ini (
- echo 没有任何备份任务
- goto end
- )
- for %%a in (ini) do (
- if %%~za==0 (
- echo 没有任何备份任务
- goto end
- )
- )
- set cnt=1
- rem 可以处理至多999个任务
- for /f "tokens=*" %%a in (ini) do (
- set "strtmp=!cnt!. "
- set strtmp=!strtmp:~0,5!
- echo !strtmp!%%a>>tmp
- set /a cnt+=1
- )
- set /a cnt-=1
- set strtmp=00%cnt%
- set strtmp=%strtmp:~-3%
- :inputTaskNO
- more tmp
- set /p taskNO=请选择你要处理的任务号:
- set strtmp2=00%taskNO%
- set strtmp2=%strtmp2:~-3%
- if %strtmp2% lss 001 (
- echo 没有这样的任务号
- goto inputTaskNO
- )
- if %strtmp2% gtr %strtmp% (
- echo 没有这样的任务号
- goto inputTaskNO
- )
- set taskAction=
- set taskFreq=
- set cnt=1
- for /f "tokens=1,2,3,4,5 delims= " %%a in (ini) do (
- if !cnt!==%taskNO% (
- set taskAction=%%b
- set taskFreq=%%d
- echo 备份名称:
- echo %%a
- echo 执行的动作:
- echo %%b
- echo 执行频率:
- echo %%d
- if %%b==提示备份 (
- echo 提示信息:
- echo %%c
- ) else (
- echo 保留几份:
- echo %%c
- )
- if %%b==文件复制 (
- set dst=
- echo 源文件或文件夹:
- for /f "delims=" %%f in (%%d!cnt!) do (
- if defined dst (
- echo %%f
- ) else (
- set dst=%%f
- )
- )
- echo 目标路径:
- echo !dst!
- )
- if %%b==文件复制 (
- if not "%%e"=="" (
- echo 你在备份前要执行的程序:
- echo %%e
- )
- )
- )
- set /a cnt+=1
- )
- del tmp
- set /p delFlag=你是否要删除此备份任务?[y/n]
- if %delFlag%==y (
- set cnt=1
- for /f "tokens=1,2,3,4,5 delims= " %%a in (ini) do (
- if not !cnt!==%taskNO% (
- if "%%e"=="" (
- echo %%a %%b %%c %%d>>tmpini
- ) else (
- echo %%a %%b %%c %%d %%e>>tmpini
- )
- )
- if !cnt!==%taskNO% (
- if %%b==文件复制 (
- del %%d!cnt!
- )
- )
- if !cnt! gtr %taskNO% (
- if %%b==文件复制 (
- set /a newNO=!cnt!-1
- ren %%d!cnt! %%d!newNO!
- )
- )
- set /a cnt+=1
- )
- del ini
- rem 如果要删除的记录为1,且配置文件中只有一条记录时,
- rem tmpini 文件不存在
- rem 如果cnt为2,表示ini中只有一条记录,你选择了删除操作,
- rem 要删除的也必然是第一条记录,
- rem 所以一个条件cnt是否等于2就够了
- if not %cnt%==2 (
- ren tmpini ini
- )
- )
- goto end
- :end
- endlocal
复制代码
|