不知道batch file中的区域设置%DATE%和%TIME%?

%DATE%%TIME%环境variables在命令行上和batch file中提供Windows机器上的当前date和时间。

可悲的是,这些价值是区域意识! 也就是说,在德国的机器上,你会得到的

 26.1.2011 

代替

 2011-26-01 

如果你想在一个文件名中使用这个variables,这就搞砸了sorting。

是否有任何简单的方法来获得一个Windowsbatch file中的地区不知道YYYY-MM-DDdatestring?

目前,我正在使用这个相当不错的解决方法:

 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 

    我试着把它和&放在一起,但似乎没有,所以我采用了两行的版本。 希望这可以帮助。