%DATE%
和%TIME%
环境variables在命令行上和batch file中提供Windows机器上的当前date和时间。
可悲的是,这些价值是区域意识! 也就是说,在德国的机器上,你会得到的
26.1.2011
代替
2011-26-01
如果你想在一个文件名中使用这个variables,这就搞砸了sorting。
是否有任何简单的方法来获得一个Windowsbatch file中的地区不知道YYYY-MM-DD
datestring?
目前,我正在使用这个相当不错的解决方法:
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i echo %date%
但是现在德国的语言环境是特定的 – 显然,完全独立的解决scheme会更好。
有问题的操作系统是Server 2008.我更不希望使用第三方工具,如果可能的话。
有几次尝试( Rob van der Woude有些东西),但在所有地区都没有任何效果。 但是,您可以通过一个易于parsing的格式获取当前时间
wmic os get LocalDateTime
以下至less已经得到UTC:
@echo off rem Get the time from WMI - at least that's a format we can work with set X= for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x echo.%X% rem dissect into parts set DATE.YEAR=%X:~0,4% set DATE.MONTH=%X:~4,2% set DATE.DAY=%X:~6,2% set DATE.HOUR=%X:~8,2% set DATE.MINUTE=%X:~10,2% set DATE.SECOND=%X:~12,2% set DATE.FRACTIONS=%X:~15,6% set DATE.OFFSET=%X:~21,4% echo %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% %DATE.HOUR%:%DATE.MINUTE%:%DATE.SECOND%.%DATE.FRACTIONS%
然而,你可能需要考虑时区偏移量(除非它是一个日志文件,那么我总是使用UTC),但这是没有一点计算不能做:-)
这是我一直在使用的双线程,这似乎工作,无论Windows版本或本地时间设置:
FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set DTS=%%a set CUR_DATE=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%
这将在以下ISO标准格式中设置一个名为%CUR_DATE%的variables:
yyyy-mm-dd
我试着把它和&放在一起,但似乎没有,所以我采用了两行的版本。 希望这可以帮助。