在Windows (Windows XP)批处理脚本中,我需要格式化当前日期和时间,以便以后在文件名等中使用。
这类似于堆栈溢出问题如何在批处理文件中添加日期,但也包含时间。
到目前为止,我有这个:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
这使:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
是否有一种方法可以允许%TIME%中的个位数小时,以便我可以得到以下结果?
2009_07_28__08_36_01
我喜欢@The lorax上面的简短版本,
但对于其他语言设置可能略有不同。
例如,在德语设置中(使用自然日期格式:dd.mm.yyyy),月份查询必须从4,2更改为3,2:
@ECHO OFF
: Sets the proper date and time stamp with 24h time for log file naming convention i.e.
SET HOUR=%time:~0,2%
SET dtStamp9=%date:~-4%%date:~3,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2%
SET dtStamp24=%date:~-4%%date:~3,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)
ECHO %dtStamp%
: Outputs= 20160727_081040
: (format: YYYYMMDD_HHmmss; e.g.: the date-output of this post timestamp)
PAUSE
创建一个名为“search_files.bat”的文件,并将下面的内容放入该文件中。然后双击它。临时的%THH%变量被放置在适当的位置来处理AM。如果时间的前两位数字为0,Windows将忽略LOG文件的其余文件名。
CD .
SET THH=%time:~0,2%
SET THH=%THH: =0%
dir /s /b *.* > %date:~10,4%-%date:~4,2%-%date:~7,2%@%THH%.%time:~3,2%.%time:~6,2%.LOG
如前所述,只有在您知道当前用户使用的格式(例如,MM/dd/yy或dd-MM-yyyy,仅举两个例子)时,解析日期和时间才有用。这是可以确定的,但是当您完成所有的强调和解析时,您仍然会遇到使用了意想不到的格式的情况,需要进行更多的调整。
您还可以使用一些外部程序,它们将以您喜欢的格式返回日期段,但这样做的缺点是需要将实用程序与脚本/批处理一起分发。
也有批处理技巧使用CMOS时钟在一个相当原始的方式,但这是太接近裸线对大多数人来说,也不总是首选的地方来检索日期/时间。
下面是避免上述问题的解决方案。是的,它引入了一些其他问题,但就我的目的而言,我发现这是在现代Windows系统的.bat文件中创建日期戳的最简单、最清晰、最可移植的解决方案。这只是一个示例,但我认为您将看到如何修改其他日期和/或时间格式等。
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyMMdd" /f
@REM reg query "HKCU\Control Panel\International" /v sShortDate
set LogDate=%date%
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f