神剑山庄资源网 Design By www.hcban.com
在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 www.jb51.net
表示取从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 www.jb51.net
再看时间:
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下比较固定。

本文来自于iihero实验室
标签:
格式化,日期字符串

神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网 免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com

评论“再谈DOS批处理下格式化日期字符串的多种方法(详解)”

暂无再谈DOS批处理下格式化日期字符串的多种方法(详解)的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。