Split

后端 未结 9 1366
感情败类
感情败类 2020-11-29 12:37

Is there a way to split the %date% in a batch file (say, in 3 environment variables), but regardless of Regional Settings? Today\'s date would be 3/13/201

9条回答
  •  情话喂你
    2020-11-29 13:09

    I've reworked sashoalm's version to take care of the suppressed-leading-zero situation:

    @Echo OFF
    SETLOCAL
    If "%Date%A" LSS "A" (Set _NumTok=1-3) Else (Set _NumTok=2-4)
    :: Default Delimiter of TAB and Space are used
    For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v iDate') Do Set _iDate=%%B
    For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v sDate') Do Set _sDate=%%B
    IF %_iDate%==0 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%F %%G
    IF %_iDate%==1 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%G %%F
    IF %_iDate%==2 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%F %%G %%H
    endlocal&SET YYYYMMDD=%YYYYMMDD%
    GOTO :eof
    
    ::
    :: Date elements are supplied in Y,M,D order but may have a leading zero
    ::
    :procdate
    :: if single-digit day then 1%3 will be <100 else 2-digit
    IF 1%3 LSS 100 (SET YYYYMMDD=0%3) ELSE (SET YYYYMMDD=%3)
    :: if single-digit month then 1%2 will be <100 else 2-digit
    IF 1%2 LSS 100 (SET YYYYMMDD=0%2%YYYYMMDD%) ELSE (SET YYYYMMDD=%2%YYYYMMDD%)
    :: Similarly for the year - I've never seen a single-digit year
    IF 1%1 LSS 100 (SET YYYYMMDD=20%YYYYMMDD%) ELSE (SET YYYYMMDD=%1%YYYYMMDD%)
    GOTO :eof
    

    returning YYYYMMDD - substring at your will.

    Interestingly, inserting after SETLOCAL

    IF NOT "%1"=="" set date=%1
    

    will allow any date in the local sequence (without the dayname) to be decoded to YYYYMMDD (but be careful that 19xx dates provided with the yy form will appear as 20xx - easily compensated-for if you find it necessary)

提交回复
热议问题