How do I get current date/time on the Windows command line in a suitable format for usage in a file/folder name?

前端 未结 28 2206
别跟我提以往
别跟我提以往 2020-11-21 05:28

Update: Now that it\'s 2016 I\'d use PowerShell for this unless there\'s a really compelling backwards-compatible reason for it, particularly because of the regional setting

28条回答
  •  春和景丽
    2020-11-21 05:59

    :: GetDate.cmd -> Uses WMIC.exe to get current date and time in ISO 8601 format
    :: - Sets environment variables %_isotime% and %_now% to current time
    :: - On failure, clears these environment variables
    :: Inspired on -> https://ss64.com/nt/syntax-getdate.html
    :: - (cX) 2017 adolfo.dimare@gmail.com
    :: - http://stackoverflow.com/questions/203090
    @echo off
    
    set _isotime=
    set _now=
    
    :: Check that WMIC.exe is available
    WMIC.exe Alias /? >NUL 2>&1 || goto _WMIC_MISSING_
    
    if not (%1)==() goto _help
    SetLocal EnableDelayedExpansion
    
    :: Use WMIC.exe to retrieve date and time
    FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC.exe Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
        IF "%%~L"=="" goto  _WMIC_done_
            set _yyyy=%%L
            set _mm=00%%J
            set _dd=00%%G
            set _hour=00%%H
            set _minute=00%%I
            set _second=00%%K
    )
    :_WMIC_done_
    
    ::   1    2     3       4      5      6
    :: %%G  %%H    %%I     %%J    %%K    %%L
    :: Day  Hour  Minute  Month  Second  Year
    :: 27   9     35      4      38      2017
    
    :: Remove excess leading zeroes
            set _mm=%_mm:~-2%
            set _dd=%_dd:~-2%
            set _hour=%_hour:~-2%
            set _minute=%_minute:~-2%
            set _second=%_second:~-2%
    :: Syntax -> %variable:~num_chars_to_skip,num_chars_to_keep%
    
    :: Set date/time in ISO 8601 format:
            Set _isotime=%_yyyy%-%_mm%-%_dd%T%_hour%:%_minute%:%_second%
    :: -> http://google.com/search?num=100&q=ISO+8601+format
    
    if 1%_hour% LSS 112 set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%am
    if 1%_hour% LSS 112 goto _skip_12_
        set /a _hour=1%_hour%-12
        set _hour=%_hour:~-2%
        set _now=%_isotime:~0,10% %_hour%:%_minute%:%_second%pm
        :: -> https://ss64.com/nt/if.html
        :: -> http://google.com/search?num=100&q=SetLocal+EndLocal+Windows
        :: 'if () else ()' will NOT set %_now% correctly !?
    :_skip_12_
    
    EndLocal & set _isotime=%_isotime% & set _now=%_now%
    goto _out
    
    :_WMIC_MISSING_
    echo.
    echo WMIC.exe command not available
    echo - WMIC.exe needs Administrator privileges to run in Windows
    echo - Usually the path to WMIC.exe is "%windir%\System32\wbem\WMIC.exe"
    
    :_help
    echo.
    echo GetDate.cmd: Uses WMIC.exe to get current date and time in ISO 8601 format
    echo.
    echo    %%_now%%     environment variable set to current date and time
    echo    %%_isotime%% environment variable to current time in ISO format
    echo    set _today=%%_isotime:~0,10%%
    echo.
    
    :_out
    :: EOF: GetDate.cmd
    

提交回复
热议问题