无论区域设置如何,都会在批处理文件中拆分%date%

sas*_*alm 6 windows cmd date batch-file regional-settings

有没有办法拆分%date%批处理文件(例如,在3个环境变量中),但不管区域设置如何?今天的日期将是3/13/2013针对美国的,但是我的区域设置是13.3.2013- 分隔符已更改,订单也是如此.

Fed*_*nis 7

四年过去了,但这个问题并没有变老,我认为现在有一个比使用 wmic 更好的答案(在 win7 上)。

for /F "tokens=1,2,3 delims=_" %%i in ('PowerShell -Command "& {Get-Date -format "MM_dd_yyyy"}"') do (
    set MONTH=%%i
    set DAY=%%j
    set YEAR=%%k
)
echo %MONTH% %DAY% %YEAR%
Run Code Online (Sandbox Code Playgroud)

使用 powershell,Get-Date您可以微调所需的格式(短、长、数字、名称等)。在此示例中,“MM_dd_yyyy”将为您提供一个带前导零的数字日期,以防是个位数的月份或天数


azh*_*rei 4

您可以使用 wmic 来完成此操作(但 XP Home 中不包含 WMIC):

@ECHO OFF
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%

:: Display the date/time in ISO 8601 format:
Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute%
Echo %_isodate%

GOTO:EOF

:s_error
Echo GetDate.cmd
Echo Displays date and time independent of OS Locale, Language or date format.
Echo Requires Windows XP Professional, Vista or Windows 7
Echo.
Echo Returns 6 environment variables containing isodate,Year,Month,Day,hour and minute.
Run Code Online (Sandbox Code Playgroud)

您可以通过解析 date 命令来查找当前日期格式所需的内容来完成此操作。

第一个链接表明您可能需要在 Win7 上编辑第二个链接中的代码,以处理短日期/长日期表单的一些额外问题。