• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    再谈DOS批处理下格式化日期字符串的三种方法(详解)

    谈到日期字符串的输出,真是让人烦。

    在Linux下,简单的一句话:date '+%Y%m%d-%H%M%S'就可以得到你要的输出:20120331-064219
    可是在windows下,要想得到这个,还是需要费点功夫的。

    1. 直接用字符串格式化输出

    比如,如果你的机器上时间的输出是这样子的:
    c:\&;echo %date%-%time%
    2012-03-31 星期六- 6:44:02.50
    那么,要想得到输出20120331- 64402,可以这样截取字符串:
    c:\&;echo %date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
    20120331- 65406
    表示取从0位置开始4个字符等等。这个方法不能截断空格。比较恼火

    2.用for语句分断截取,似乎好点

    先看看for的用法:

    复制代码 代码如下:

    FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
    FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
    FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

    optinos
    eol=c           - 指一个行注释字符的结尾(就一个)//要忽略以什么字符开头的行
    skip=n          - 指在文件开始时忽略的行数。
    delims=xxx      - 指分隔符集。这个替换了空格和跳格键的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
                      默认分隔符集。
    tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                      的 for 本身。这会导致额外变量名称的分配。m-n
                      格式为一个范围。通过 nth 符号指定 mth。如果
                      符号字符串中的最后一个字符星号,
                      那么额外的变量将在最后一个符号解析之后
                      分配并接受行的保留文本。
    usebackq        - 指定新语法已在下类情况中使用:
                      在作为命令执行一个后引号的字符串并且一个单
                      引号字符为文字字符串命令并允许在 filenameset
                      中使用双引号扩起文件名称。
    参照这个用法,我们可以对日期字符串进行格式化输出:
    因为日期结果是:2012-03-31 星期六
    因为分隔字符是'-'还有空格' ',所以取3段出来,如:
    c:\&;for /f "tokens=1-3 delims=- " %1 in ("%date%") do @echo %1%2%3
    20120331
    再看时间:
    c:\&;echo %time%
    6:59:20.38
    c:\&;for /f "tokens=1-3 delims=.: " %1 in ("%time%") do @echo %1%2%3
    65939
    两者一结合起来可以这样用:

    复制代码 代码如下:

    c:\&;for /f "tokens=1-3 delims=- " %1 in ("%date%") do set ttt=%1%2%3
    c:\&;set ttt=20120331
    c:\&;for /f "tokens=1-3 delims=.: " %1 in ("%time%") do set ttt=%ttt%-%1%2%3
    c:\&;set ttt=20120331-70131

    写成批处理,就变成这样(goodtime.bat):

    复制代码 代码如下:

    for /f "tokens=1-3 delims=- " %%1 in ("%date%") do set ttt=%%1%%2%%3
    for /f "tokens=1-3 delims=.: " %%1 in ("%time%") do set ttt=%ttt%-%%1%%2%%3

    echo goodtime=%ttt%
    这种方法比较灵活。

    3.还有一种,是使用VBScript来定制输出

    复制代码 代码如下:

    wscript.echo   year(date)      right( "0"      month(date),2)      right( "0"      day(date),2)      "-" right( "0"      hour(time),2)      right( "0"      minute(time),2)

    结果如下,还是比较有意思的

    复制代码 代码如下:

    c:\&;cscript /nologo c:\shared\datescript.vbs
    20120331-0711
    当然这样还是不太理想,可以写个批处理,把结果弄到环境变量当中:
    mydate2.bat,内容如下:
    @echo off
    cscript /nologo datescript.vbs >> tmp.txt
    for /f "tokens=*" %%1 in (tmp.txt) do set goodtime=%%1
    echo goodtime=%goodtime%

    总结起来,第3种方法最复杂,目前还不能断定是否在所有windows平台都能正确运行,但是结果应该是固定的。不随着date,time格式变动而变动。但是1和2会依赖于日期时间的格式。仅此而已。
    还是linux下比较固定。

    上一篇:用注册表更改DNS的代码分享
    下一篇:win7怎么设定关闭显示器时间
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    再谈DOS批处理下格式化日期字符串的三种方法(详解) 再谈,DOS,批处理,下,格式化,