windows批处理bat脚本获取并且处理当前日期与时间信息
操作系统不同,日期格式也可能不同:
星期二 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获取当前日期与时间的代码分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
certutil - decode/encode BASE64/HEX strings.Print symbols by
Certutil is available on my WIN 7 and Vista machines by default.I think it should be also available for XP but I'm not 100% sure.2016-10-10
最新评论