Search code examples
windowsfiledatebatch-filegetdate

batch script Errror : get the day of the year


This script let me get the day of year from the current date in a Windows batch file

i used it since january without problem but this month the script breaks off unnoticed and show incorrect informations.

This is the error :

Invalid number. Numeric constants are either decimal (17),
hexadecimal (0x11) or octal (021) numbers.

here is the batch code

 @echo off & setlocal enabledelayedexpansion

set "_cmd=Get Day^,Month^,Year^"
for /l %%L in (2020 4 2100)do set "_array_leap_year_=!_array_leap_year_!%%L,"


for /f "tokens=1-3delims= " %%a in ('wmic Path Win32_LocalTime !_cmd! ^| findstr /r "[0-9]"')do (
    set "_yy=%%c"
    set "_mm=0%%b"
    set "_dd=0%%a"
    set "_mm=!_mm:~-2!"
    set "_dd=!_dd:~-2!"
    set _date=!_yy!_!_mm!_!_dd!
    )

    echo/!_array_leap_year_!|findstr /lic:"!_date:~0,4!," >nul && (
    set "_leap_=29" & set "_year_=366" )||( set "_leap_=28" & set "_year_=365" )

    set "_mm_dd_year_=01-31,02-!_leap_!,03-31,04-30,05-31,06-30,07-31,08-31,09-30,10-31,11-30,12-31"
    set /a "_loop=!_mm! * 6"

    for /l %%d in (0 6 !_loop!)do set "_sum=!_mm_dd_year_:~%%d,5!" && (
    if "9!_sum:~,2!" lss "9!_mm!" set /a "_day_year_+=!_sum:~-2!"  )

    set /a "_day_year_+=!_dd!"
    set /a "_remain=!_day_year_! - !_year_!"
    echo/Today: !_date! ^| Day of Year: !_day_year_! ^| Days Remaining: !_remain:-=!

Solution

  • Copy the code exactly as is:

    All we changed here is set /a "_loop=1!_mm! * 6 - 600" which effectively does set _loop=108 * 6 - 600 which results in 48 same result as 6 * 8

    @echo off & setlocal enabledelayedexpansion
    set "_cmd=Get Day^,Month^,Year^"
    for /l %%L in (2020 4 2100)do set "_array_leap_year_=!_array_leap_year_!%%L,"
    
    for /f "tokens=1-3delims= " %%a in ('wmic Path Win32_LocalTime !_cmd! ^| findstr /r "[0-9]"')do (
        set "_yy=%%c"
        set "_mm=0%%b"
        set "_dd=0%%a"
        set "_mm=!_mm:~-2!"
        set "_dd=!_dd:~-2!"
        set _date=!_yy!_!_mm!_!_dd!
        )
    
        echo/!_array_leap_year_!|findstr /lic:"!_date:~0,4!," >nul && (
        set "_leap_=29" & set "_year_=366" )||( set "_leap_=28" & set "_year_=365" )
    
        set "_mm_dd_year_=01-31,02-!_leap_!,03-31,04-30,05-31,06-30,07-31,08-31,09-30,10-31,11-30,12-31"
        set /a "_loop=1!_mm! * 6 - 600"
    
        for /l %%d in (0 6 !_loop!)do set "_sum=!_mm_dd_year_:~%%d,5!" && (
        if "9!_sum:~,2!" lss "9!_mm!" set /a "_day_year_+=!_sum:~-2!"  )
    
        set /a "_day_year_+=!_dd!"
        set /a "_remain=!_day_year_! - !_year_!"
        echo/Today: !_date! ^| Day of Year: !_day_year_! ^| Days Remaining: !_remain:-=!