Windows批处理:将格式化日期保存到变量中
问题的原因是Windows批处理中如何将格式化日期存储到变量中。解决方法是使用命令提示符中的date /T
命令来查找日期格式,然后根据日期格式进行相应的操作。例如,如果日期格式为Thu 17/03/2016
,可以使用以下代码:
set datestr=%date:~10,4%-%date:~7,2%-%date:~4,2% echo %datestr%
这是最接近问题的答案。我只需要一个简单的一行代码,而不是一个程序。
其他回答中的一些答案看起来几乎像是"安装MS SQL Server,使用SQL客户端连接,并执行命令SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
"。
日期时间以ISO-8601格式为%date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
。
其他回答看起来像是一个程序的原因是,尽管这个答案很简单,但是如果你的Windows区域设置没有按照代码所期望的方式进行配置,它将无法工作(即这段代码不能在每个Windows系统上都起作用)。
在Windows批处理脚本中,如果想要将格式化的日期保存到变量中,可以使用以下命令:
FOR /F "TOKENS=1 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dd=%%A FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B FOR /F "TOKENS=1,2,3 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET yyyy=%%C
这段代码将日期分割成三个变量:日(dd)、月(mm)和年(yyyy)。您可以在脚本的其他部分使用这些变量。
接下来,可以将这些变量组合成一个完整的日期:
SET todaysdate=%yyyy%%mm%%dd% echo %dd% echo %mm% echo %yyyy% echo %todaysdate%
尽管在这个问题中已经接受了一个答案,但是这种替代方法可能会受到许多想要在批处理脚本中实现此目标而不使用WMI控制台的人的欢迎,因此希望它能为这个问题增加一些价值。
有用户发现在Windows 7上需要稍作修改,token的值需要递增一个:... FOR /F "TOKENS=2,3,4 eol=/ DELIMS=/ " ...
在Azure上的Windows Server 2012上也是如此。
抱歉,这个答案只适用于特定的日期格式(甚至不确定是哪种格式),所以上面的评论说它不起作用。而在页面上更高的答案则可以适用于任何日期格式。
问题的出现原因:用户想要在Windows批处理脚本中将格式化的日期存储到变量中。
解决方法:可以使用"wmic os get localdatetime"命令获取当前日期,并通过字符串截取的方式提取年、月、日等部分。另一种方法是使用"wmic path win32_localtime"命令获取年、月、日等部分,并将它们存储到变量中。如果需要UTC时间而非本地时间,则命令类似。需要注意的是,如果在测试命令时打开了命令提示符窗口,它将显示命令提示符打开时的时间,而不是当前时间。如果运行多次上述命令,每次调用将不会得到新的日期,因为命令会检查变量是否已定义。可以通过使用"set MyDate="来解决这个问题。这种方法可以获得与语言环境无关的时间戳,使解析更容易,批处理文件更健壮。此外,还提到了使用VBScript或PowerShell进行脚本编写的建议。最后,有用户提出了如何获取文件的"修改日期"并以类似格式显示的问题。