最近公司的项目,须要部署一个oracle定时备份脚本,删除掉特定时间前的备份文件。BAT批处理文件结合windows系统(任务计划程序)windows
正常状况下咱们的任务计划会有反馈数值,经过它能够判断这个任务计划上次是否运行正常。oracle
任务计划程--历史记录里,操做完成,任务完成。可是在任务栏--上次运行结果显示不是操做成功完成(0x0),而是0x1。函数
经过以上错误代码,去排除调用的函数,发现是脚本文件里的定义时间机制,与设定任务计划时间不匹配形成没法正确运行脚本。spa
我在任务计划设置的时间是 AM 0:30指针
bat脚本时间设定以下:部署
set var=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%class
致使脚本没法正常运行的语句以下:date
%time:~0,2%%time:~3,2%%time:~6,2%file
以下的各个操做的意义以下:
%time:~0,2% 表示从左向右指针向右偏0位,而后从指针偏移到的位置开始提取2位字符,结果是小时字段数值
%time:~3,2% 表示指针从左向右偏移3位,而后从偏移处开始提取2位字符,结果是分钟字段数值
%time:~6,2% 表示指针从左向右偏移6位,而后从偏移处开始提取2位字符,结果是秒字段数值
//建立时间命名的文件夹程序
md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
用%time:~0,2%%time:~3,2%%time:~6,2%时有个问题, 就是若是TIME 是00点的时候,电脑显示的是0 不是00因此%time:~0,2%就报错了。
例子:2019-1-20时间1:26:20
set fileDate=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set fileDate2=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%
echo fileDate:%fileDate%
echo fileDate2:%fileDate2%
fileDate: 20190120 12620(1前面是空格)
fileDate2: 2019012012620
总结:
1)若是要用%time:~0,2%%time:~3,2%%time:~6,2% (运行脚本的时间必定是在10-23点区间,不然0-9(H)脚本调用函数错误,没法运行)
2)若是要用%time:~1,1%%time:~3,2%%time:~6,2% (建议运行脚本的时间在0-9点这个区间,若是是>9点,
好比13点。会形成只显示个位数字3,好比2019-1-20 时间13:26:20 会显示2019012032620 从而影响时间的总体准确性)
3)或者是直接舍去时间,只用日期来定义文件名。
%date:~0,4%%date:~5,2%%date:~8,2%
好比2019-1-20 那么文件名会显示为20190120.(若是需求是天天作一个备份,那么这样命名是没什么影响的,
若是是一天须要N个备份文件,请参照上面两种时间设定)