批处理中使用时间和日期
http://blog.joycode.com/mvm/archive/2005/05/10/50624.aspx
如果要获取当前时间或日期,可以使用%date%和%time%来得到。
如果要对日期和时间做格式化,可以利用:~来做,例如:
echo %date:~0,4%%date:~5,2%%date:~8,2%
返回20070211。
:~表示提取第几个开始的多少个字符,第一位从0计。其中0、4位置的数字还可以是负值,应该是代表了从字符串末尾、向前取字符。
有人还说,利用下面的命令也可以取出当前时间,试了一下,是可以echo出来,但如何加以利用就不知道了。
for /f "tokens=1,2,3 delims=- " %a in ('date /t') do @echo "%a-%b-%c"
上面这个命令中,date /t必须用单引号包含,双引号不行。
不知道这样取substring的方法对其它变量是否适用。
实际上,我们可以利用:~来提取任意环境变量中的任意的字符!
批处理时间如果由前导0需要处理,可以这样:
set abc=%time: =0%
echo 时: %abc:~0,2% 分: %abc:~3,2%
利用 date /t 有个问题就是在不同的系统上,可能输出的日期格式不一致,导致获取的 年月日是不能适用个日期格式的,在其他的电脑上可能不能正确获取日期文件名。
在 Windows 的批处理脚本中,可以使用以下命令获取当前日期并将其格式化为yyyyMMdd:
for /f "tokens=2 delims==" %%G in ('wmic os get LocalDateTime /value') do set "dt=%%G"
set "date=%dt:~0,8%"
此命令使用了 WMIC 命令来获取本地日期和时间,然后使用 FOR 命令和字符串剪切来提取日期的前八个字符,并将其存储在变量 %date% 中。
这种方法可以在不同的 Windows 系统上运行,并且不受日期格式设置的影响。您可以根据需要将日期格式修改为其他格式。
可以采用以下方法来兼容各种系统的日期区域格式设置:
1. 不依赖于系统日期格式,而是使用 PowerShell 的 Get-Date 命令来获取日期,并指定输出格式为指定的 yyyyMMdd 格式,然后将结果赋值给一个变量,再将该变量用于文件名。
@echo off
setlocal
for /f %%a in ('powershell Get-Date -UFormat %%Y%%m%%d') do set date=%%a
echo %date%.txt
@echo off
setlocal
for /f "skip=1 tokens=1-6 delims= " %%a in ('wmic path Win32_LocalTime get day^,month^,year /format:table') do (
set /a year=%%c
set /a month=100+%%b
set /a day=100+%%a
)
set date=%year:~-4%%month:~-2%%day:~-2%
echo %date%.txt
无论使用哪种方法,都需要注意以下几点: