DOS批处理下格式化日期字符串

iamlaosong文

在Linux下,简单的一句话:date '+%Y%m%d-%H%M%S'就可以得到你要的输出:20120331-064219 
可是在windows下,要想得到这个,简单的办法是直接用字符串格式化输出。 


比如,如果你的机器上时间的输出是这样子的: 

c:\>echo %date%-%time% 
2017-05-15 星期一- 5:16:34.29 
那么,要想得到日期和时间的格式化输出,可以这样截取字符串: 
c:\>echo %date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2% 
20170515- 52406 
表示取从0位置开始4个字符等等。日期部分截取没有任何问题,但时间部分有点小问题。
当时间小于10时,这个方法小时部分含有一个空格,做个简单的替换就行了。为了防止多次取时间造成的不一致,建议一次性取值,然后进行字符串处理。例如:

set dd=%date%

set tt=%time%
set tt1=%dd:~0,4%%dd:~5,2%%dd:~8,2%-%tt:~0,2%%tt:~3,2%%tt:~6,2%
echo %tt1%
set tt2=%tt1: =0%
echo %tt2%
替换前后分别显示为:20170515- 54430和20170515-054430

时间超过10点时,字符串中无空格,相当于没做替换,所以不必判定是否存在空格。

取当天的日期比较简单,如果需要取前几天或后几天的日期就比较麻烦了(Linux下很简单,用命令:date -d '-1 day' +%Y%m%d),方法很多,我觉得比较简单的还是用VBS脚本完成。

=================================================

附:批处理获取昨天的系统日期(当前日期前一天)

说明:此方法不是单纯的DOS命令,需要配合vb脚本完成。方法如下:


@echo off
cd /d %~dp0
echo %cd%

echo wscript.echo dateadd("d",-1,date) >tmp.vbs

for /f "tokens=1,2,3 delims=/" %%i in ('cscript /nologo tmp.vbs') do (
set /a y=%%i
set /a m=%%j
set /a d=%%k
)

ECHO %y%
echo %m%
echo %d%

if %m% LEQ 9 set m=0%m%
if %d% LEQ 9 set d=0%d%

set tt=%y%%m%%d%
echo %tt%

del /s /q tmp.vbs

pause
echo on

批处理命令说明如下:
@echo off

rem 以下进入和显示批处理脚本所在的目录
cd /d %~dp0
echo %cd%

rem 以下将vb的命令输出到一个当前目录的vb脚本,这个vb的命令就是可以直接取出前一天的日期
rem 日期显示的格式会根据系统格式显示也不同
rem 输入的这个脚本可以直接双击运行得出前一天的日期,如果需要请先注释掉删除这个vb脚本的语句
echo wscript.echo dateadd("d",-1,date) >tmp.vbs

rem 使用for命令加tokens参数,在前面vb脚本得出的结果,以‘/’为分隔标志取出前三项
rem 然后把取得三个结果分别赋予不同的变量,从‘i’开始,依此为‘i’‘j’‘k’。(可以去更多项,依此赋予‘l’‘m’…………)
for /f "tokens=1,2,3 delims=/" %%i in ('cscript /nologo tmp.vbs') do (
rem 重新为取出三个结果定义变量,这里根据年、月、日的缩写定义
set /a y=%%i
set /a m=%%j
set /a d=%%k
)

rem 显示出重新定义的结果
echo %y%
echo %m%
echo %d%

rem 如果取出的三项结果里有小于9的,用0填充。
if %m% LEQ 9 set m=0%m%
if %d% LEQ 9 set d=0%d%

rem 设置变量,将判断填充过的结果组合成想要的日期格式。
set tt=%y%%m%%d%
echo %tt%

rem 删除自动生成的vb脚本
del /s /q tmp.vbs

pause

echo on

结束,,,恭喜你成功了


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值