DOS/BAT

关注公众号 jb51net

关闭
首页 > 脚本专栏 > DOS/BAT > bat获取当前日期与时间的代码分析

windows批处理bat脚本获取并且处理当前日期与时间信息

投稿:mdxy-dxy

最近同步一些数据需要获取当前的日期然后,通过分隔符等格式化成需要的日期,那么就需要了解一下他的核心原理那么就可以得到我们想到的结果了

操作系统不同,日期格式也可能不同:

星期二 2008-07-29
2008-07-29 星期二
07/29/2008 Tue
Tue 07/29/2008

再考虑到中、英之外的其它语言的操作系统,日期格式的种类实在太多了。
要想标准化地获取当前系统日期2008-07-28,直接截取%date%变量的方法是不行的。

一、%date:~0,4%和 %time:~0,2%字符截取操作用法

比如在windows cmd命令行窗口执行date命令后这个环境变量的值为

那么如下的各个操作的意义如下:

%date:~0,4%  表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2024(年的值)
%date:~5,2%  表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是05(月的值)
%date:~8,2%  表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是19(日的值)
%date:~5%    表示指针从左向右偏移5位,然后提取所有的值
%date:~-5%   表示指针反方向偏移,从最右端开始,偏移5位,然后从指针处提取左边的所有数值。
 
注意:“2024-05-19 周日”是个字符串,在计算机里指针是从0开始计数的,所以这串字符的指针意义上的第5位是0,月份的0,取两位刚好是05. 

同理,比如当前系统的time变量的值如下:

那么如下的各个操作的意义如下:

%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%
注:md是创建目录的意思 
执行后D盘根目录多了一个文件夹

这样就可以了。

二、如何获取当前日期时间信息

其实很简单,看示例

::demo.bat

@echo off

echo date=%date%
echo time=%time%

pause

三、如何将当前日期时间信息格式化为字符串

其实获取到的当前日期时间信息已经是字符串了,只是有时候我们可能需要不一样的格式,这里提供两种方法。

1.第一种方法

看代码

::demo.bat
@echo off
set datetime=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
echo %datetime%
pause

2.第二种方法

看代码

::demo.bat
@echo off
for /f "tokens=1-3 delims=/- " %%1 in ("%date%") do set datetime=%%1-%%2-%%3
for /f "tokens=1-3 delims=.: " %%1 in ("%time%") do set datetime=%datetime%-%%1-%%2-%%3
echo %datetime%
pause

这两种方法看起来第一种更简单一点,但是第一种会存在一个问题,就是有可能会包含空格,这样实际使用的时候就可能会遇到问题,比如以这个字符串为名称创建文件夹时可能会创建出来两个,所以按需使用,具体的原理这里就不解释了。

四、bat 获取系统时间,并去掉时间小时前面的空格

有时候我们需要获取当前系统的时间,如果小时小于10的话,获取小时会出现空格的情况:

c:\>time
当前时间: 19:41:41.61
c:\>echo %time:~0,2%
 8    ------这个8前面是有空格的

c:\>
如何去掉空格让时间正确的显示呢?其实只需要将空格替换成0就可以了。

c:\>set h=%time:~0,2%

c:\>echo %h: =0%  -----这里的‘=’就是‘替换’的含意
08

c:\>
你也可以将这里的空格替换成其它值:
c:\>echo %h: =aaaaa%
aaaaa8
那现在获取当前系统的日期和时间就可以这么写了:

c:\>set h=%time:~0,2%

c:\>set h=%h: =0%

c:\>echo %date:~0,4%%date:~5,2%%date:~8,2%%h%%time:~3,2%%time:~6,2%

20240519194112

五、Windows bat 当前、昨天、明天日期

当前日期

@echo off
echo %date% #输出2024-05-19 周日
echo %date:~0,10% #2024-05-19
echo %date:~0,4%%date:~5,2%%date:~8,2% #20240519
echo %time% # 19:45:21.61
pause

昨天日期

yesterday.bat

@echo off
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
for /f %%a in ('cscript /nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
for /f "tokens=1,2,3* delims=//- " %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k
if   %mm%   LSS   9   set   mm=0%mm%
if   %dd%   LSS   9   set   dd=0%dd%
set yesterday=%yyyy%-%mm%-%dd%
echo 昨天是:%yesterday%
echo 请按任意键退出
pause>nul

需要注意的是 delims=//-,因为不同操作系统不同的分隔符,2024-05-19 与 2024/05/19,/是特殊符号需要转义,如果是-,直接就-就可以了,如下图所示

@echo off
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
for /f %%a in ('cscript /nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
for /f "tokens=1,2,3* delims=- " %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k
if   %mm%   LSS   9   set   mm=0%mm%
if   %dd%   LSS   9   set   dd=0%dd%
set yesterday=%yyyy%-%mm%-%dd%
echo 昨天是:%yesterday%
echo 请按任意键退出
pause>nul

明天日期

tomorrow.bat

@echo off
echo Wscript.echo dateadd("d",1,date)>vbs.vbs
for /f %%a in ('cscript /nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
for /f "tokens=1,2,3* delims=//- " %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k
if   %mm%   LSS   9   set   mm=0%mm%
if   %dd%   LSS   9   set   dd=0%dd%
set tomorrow=%yyyy%-%mm%-%dd%
echo 明天是:%tomorrow%
echo 请按任意键退出
pause>nul

效果图

到此这篇关于windows批处理bat脚本获取并且处理当前日期与时间信息的文章就介绍到这了,更多相关bat获取当前日期与时间的代码分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文