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

2019-09-19 06:45:43于海丽

参照这个用法,我们可以对日期字符串进行格式化输出:
因为日期结果是: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:shareddatescript.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下比较固定。

相关文章 大家在看