zoukankan      html  css  js  c++  java
  • BAT批处理文件,脚本时间值%time:~0,2%%time:~3,2%%time:~6,2%的用法。

    最近公司的项目,需要部署一个oracle定时备份脚本,删除掉特定时间前的备份文件。BAT批处理文件结合windows系统(任务计划程序)

    正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计划上次是否运行正常。

    • 代码 0 或 0x0:操作成功完成。
    • 代码 1 或 0x1:调用的函数不正确或调用了未知函数。
    • 代码 10 或 0xa:环境不正确。
    • 代码 0x8009000f:常规访问被拒绝

    任务计划程--历史记录里,操作完成,任务完成。但是在任务栏--上次运行结果显示不是操作成功完成(0x0),而是0x1。

    通过以上错误代码,去排除调用的函数,发现是脚本文件里的定义时间机制,与设定任务计划时间不匹配造成无法正确运行脚本。

    我在任务计划设置的时间是 AM 0:30

    bat脚本时间设定如下:

    set var=%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:~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个备份文件,请参照上面两种时间设定)

  • 相关阅读:
    405
    406
    4-1
    3-11
    3-10
    3-9
    3-8
    3-7
    3-5
    3-4
  • 原文地址:https://www.cnblogs.com/grisa/p/10234407.html
Copyright © 2011-2022 走看看