『楼 主』:
[原创]计划任务小程序 [06.12更新]
自己没有学习过DOS,恐怕这个要归结于接触电脑的时间比较晚,还好发现了这个好地方。那个开心啊~~~而且感觉只要来这里就一定有收获!
首先不算多也在坛子里泡大半年了,自己水平很低报着学习的态度来看待任何问题,不过有幸的是整个论坛的氛围很好,除了板油积极的态度,更重要的这里有着一帮热心并且水平很高的斑竹。可以说是我们很好的老师,在此向帮助过我的朋友表示感谢。
花了2天时间写了这个小程序,主要是想把在这里的所学集中的使用一次,当然是比较低级的程序,希望大家不要见笑并给予支持。
请各位看看有什么写的不妥或者不正确的地方,很乐意接受意见。
更改时间:2006.6.9 10时
早上花了点时间加了批注,等于是自己再复查一遍以有的问题,果然发现几个地方的问题。:P,附件没有更新存在几个大小写的问题
更改时间2006.6.12 13时,加入了对时间和日期的检验
==========ETIME========
@echo off
color 1f
echo.
echo 定时计划工具 VER:1.0
echo by:风弛网络,jastyg
echo Email:support@efengchi.com
echo [url]HTTP://WWW.EFENGCHI.COM[/url]
echo for xp/2k3
echo.
echo.
rem ++++++++++++++++++++外部命令行模式的处理+++++++++++++++++++++++++++
rem ===================检测外部是否输入为空后者是帮助信息============
if "%1!%"=="!" goto guihelp :如果外部为空,则使用图形页面
if "%1%"=="/?" goto help :外部输入/?则出现DOS的帮助提示
if "%1%"=="/h" goto help :同上,输入/h
if "%1%"=="/H" goto help :同上,分别给出了大小写。
[color=Red]for %%i in (0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) do if "%1"=="%%i" goto kaishi
goto warng2[/color]
rem====================开始对外部输入进行设置和检验==================
:kaishi
if "%1"=="0" set d=0&set riqi=0& goto t :初始如果日期为0
set /a tmp=%date:~8,3%+0 >nul :判断日期是否为8号或者9号,以接下文(解决8,9的无效字符方法)
cls :清屏
if errorlevel 9167 goto tmp1 :接上文接受是否为8号或者9号
goto tmp2
rem====================对8,9号的日期进行确定========================
:tmp1
echo %date:~8,2% >tem.txt :导出当前的日期到临时文件
find "08" tem.txt >nul :从临时文件寻找是否含有数值08,以接下文
if not errorlevel 1 set riqi=8&goto tmp3 :判断如果含有08,则设置riqi变量为8,跳转到TMP3标签
find "09" tem.txt >nul :从临时文件寻找是否含有数值09,以接下文
if not errorlevel 1 set riqi=9&goto tmp3 :判断如果含有09,则设置riqi变量为9,跳转到TMP3标签
rem====================对外部日期不为0,8,9的情况下的处理===============
:tmp2
set /a riqi=%date:~8,2%+0 :对日期进行十位为空去0处理
:tmp3
set /a d=%1+0 :对用户输入的日期十位为空去0处理
rem===================对外部时间,用户命令进行处理=================================
:t
if exist tem.txt del tem.txt :对日期设置完成所留下的临时文件的清理
set t=%2 :定义变量T为用户输入的时间
[color=Red]for %%i in
(0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,) do if "%t:~0,2%"=="%%i" goto CRC
goto warng2
:CRC
if "%t:~2,1%"==":" goto CRC1
goto warng2
:crc1
for %%i in
(0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,) do if
"%t:~3,2%"=="%%i" goto bcmd
goto warng2
:bcmd[/color]
set cmd=%~3 :定义运行的程序为用户输入
if "%~3!"=="!" goto command :如果用户不输入,则跳到默认设置给的值,到COMMAND
goto 4
:command
set cmd=c:\windows\风弛备份.bat :设置默认运行命令
rem===================设置外部循环选项命令==========================================
:4
if "%4!%"=="!" goto 41 :判断是否为空并相对跳转
if "%4%"=="n" goto 41 :判断是否为小写n并相对跳转
if "%4%"=="N" goto 41 :是否为大写N并相对跳转
if "%4%"=="y" goto 42 :是否为小写y并相对跳转
if "%4%"=="Y" goto 42 :是否为大写Y并相对跳转
rem===================设置默认及不循环==============================================
:41
set rem=echo. :定义变量为echo.
goto start :跳转到日期时间的检验部分
:42
set rem=goto start :定义变量为goto 语句,实现循环
set yanchi=ping -n 60 127.1^>nul :为防止时间在指定时间内多次运行,设置了延迟1分钟
goto start :跳转到日期时间的检验部分
echo.
rem ++++++++++++++++++++图形化的设置和配置处理++++++++++++++++++++++++++++++++++++++++
rem===================图形化帮助提示================================================
:guihelp
echo 请等待......
ping -n 1 ping 127.1 >nul
cls
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
echo +用法1:直接运行此文件,跟向导走。需要帮助请输入?或者h +
echo +日期格式:例如9号,可以输入9或者09 +
echo +时间格式采用24小时制,即:20:50 (精度到分钟) +
echo +用法2:命令行模式; +
echo +语法:etime 日 时间 命令(最好写完整路径) Y/N(是否循环运行,默认为N) +
echo +例:etime 7 20:20 notepad.exe (7日,20:20运行 NOTEPAD这个程序,并且不循环) +
echo +例:etime 0 20:20 notepad.exe Y (20:20运行 NOTEPAD这个程序,并且循环) +
echo +DOS下输入 etime /? 或者 etime /h 得到帮助 +
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rem===================对用户输入日期进行检测和定义==================================
:begin
echo 请输入日期
set d1=enter :定义一个值给D1,用来下文的用户输入为空的检测
set /p d1= :用户自定义输入
if "%d1%"=="?" goto guihelp :图形帮助的调用
if "%d1%"=="h" goto guihelp :同上
if "%d1%"=="H" goto guihelp :同上
if "%d1%"=="enter" goto warng :检测用户输入是否为空,并进行相对处理
if "%d1%"=="0" set d=0&set riqi=0& goto shij :检测用户输入是否为0,并相对定义
[color=Red]for %%i in(0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,?,h,H,) do if "%
d1%"=="%%i" goto 89
goto warng
:89[/color]
set /a tmp=%date:~8,3%+0 >nul :判断日期是否为8号或者9号,以接下文(解决8,9的无效字符方法)
cls
if errorlevel 9167 goto tem1 :接上文接受是否为8号或者9号,并相关跳转
goto tem2
rem====================对8,9号的日期进行确定,同上TMP1========================
:tem1
echo %date:~8,2% >tem.txt
find "08" tem.txt >nul
if not errorlevel 1 set riqi=8&goto tem3
find "09" tem.txt >nul
if not errorlevel 1 set riqi=9&goto tem3
rem====================对日期不为0,8,9的情况下的处理,同上TMP2===============
:tem2
set /a riqi=%date:~8,2%+0
:tem3
set /a d=%d1%+0
rem===================对时间,用户命令进行处理=================================
:shij
if exist tem.txt del tem.txt :对日期设置完成所留下的临时文件的清理
cls
echo 请输入时间
set t=enter :定义一个值给T,用来下文的用户输入为空的检测
set /p t= :用户自定义输入
if "%t%"=="?" goto guihelp :图形帮助的调用
if "%t%"=="h" goto guihelp :同上
if "%t%"=="H" goto guihelp :同上
if "%t%"=="enter" goto warng1 :检测用户输入是否为空,并进行相对处理
[color=Red]for %%i in
(0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,?,h,H) do if "%t:~0,2%"=="%%i" goto TCRC
goto warng1
:TCRC
if "%t:~2,1%"==":" goto TCRC1
goto warng1
:tcrc1
for %%i in
(0,1,2,3,4,5,6,7,8,9,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,
17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,) do if
"%t:~3,2%"=="%%i" goto cmd
goto warng1[/color]
rem==================对用户命令的处理===========================================
:cmd
echo 请输入要执行文件的路径和文件名
set cmd=enter
set /p cmd=
if "%cmd%"=="?" goto guihelp
if "%cmd%"=="h" goto guihelp
if "%cmd%"=="H" goto guihelp
if "%cmd%"=="enter" goto command1
goto xunhuan
:command1
set cmd=c:\windows\风弛备份.bat
rem==================定义是否循环================================================
:xunhuan
echo 是否要循环运行? Y/N
set rem=enter
set /p rem=
if "%rem%"=="y" goto 14
if "%rem%"=="Y" goto 14
if "%rem%"=="enter" goto 24
if "%rem%"=="n" goto 24
if "%rem%"=="N" goto 24
:14
set rem=goto start
set yanchi=ping -n 60 127.1^>nul
goto start
:24
set rem=rem goto
cls
rem==================当前日期时间和用户输入日期时间的检测和相对处理========================
:start
if "%riqi%%time:~0,5%"=="%d% %t%" goto run
ping -n 15 127.1>nul
rem==================DOS下的帮助提示=======================================================
:help
chcp 936 >nul
echo 语法:etime 日 时间 命令(最好写完整路径) Y/N(是否循环运行,默认为N)
echo 例:etime 7 20:20 notepad.exe (7日,20:20运行 NOTEPAD这个程序,并且不循环)
echo 例:etime 7 20:20 "del c:\aaa.txt" (指定时间删除特定文件)
echo 例:etime 0 20:20 notepad.exe Y (20:20运行 NOTEPAD这个程序,并且循环)
echo DOS下输入 etime /? 或者 etime /h 得到帮助
goto exit
rem==================输入错误提示==========================================================
:warng
echo 您的日期输入有误!
echo.
goto begin
rem==================输入错误提示==========================================================
:warng1
echo 您的时间输入有误!
echo.
goto shij
rem==================执行用户定义命令或默认命令,以及是否循环==============================
:run
cls
start %cmd% :执行命令
%yanchi% :延迟时间接上文防止命令多次运行
%rem% :定义是否循环
exit :程序结束
rem==================退出到提示符下=========================================================
[color=Red]:warng2
echo 语法错误!![/color]
:exit 第一天写好之后感觉一切很好,不过在经过自己的几次测试后发现了不少问题,现在把自己已知的问题都改了。目前自我感觉很好(当然老师们看了肯定会发现有很多毛病,呵呵)
附件里有我加过壳的,可以直接使用。感觉可以跟AT命令有的一拼。
[ Last edited by jastyg on 2006-6-12 at 16:09 ]
附件
1: etime.rar (2006-6-12 16:08, 63.43 K, 下载附件所需积分 1 点
,下载次数: 104)
|