(view source code of week.bat as plain text)
@ECHO OFF
:: Week.bat, Version 1.01 for Windows NT
:: Display the number of the current week
::
:: This batch file assumes English DATE command output with weekday, e.g. "Mon 10-10-2014"
::
:: Credits: Error in DoY function fixed by Marcin Ryczywolski
::
:: Written by Rob van der Woude
:: http://www.robvanderwoude.com
:: Use local copy of environment and enable command extensions
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 (
ECHO Unable to enable command extensions
GOTO End
)
:: Export registry settings for date format to a temporary file
START /W REGEDIT /E %TEMP%.\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
:: Read date format from the exported data
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "iDate"') DO SET iDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE %TEMP%.\_TEMP.REG ^| FIND /I "sDate"') DO SET sDate=%%B
DEL %TEMP%.\_TEMP.REG
:: Remove quotes
SET iDate=%iDate:"=%
SET sDate=%sDate:"=%
:: Convert current date to number of days passed this year,
:: taking into account the date format read from the registry
IF %iDate%==0 FOR /F "tokens=2-4* delims=%sDate% " %%A IN ('DATE/T') DO CALL :DoY %%B %%A %%C
IF %iDate%==1 FOR /F "tokens=2-4* delims=%sDate% " %%A IN ('DATE/T') DO CALL :DoY %%A %%B %%C
IF %iDate%==2 FOR /F "tokens=2-4* delims=%sDate% " %%A IN ('DATE/T') DO CALL :DoY %%C %%B %%A
:: Convert day of week to number
FOR /F "tokens=1 delims= " %%A IN ('DATE/T') DO CALL :DoW %%A
:: Calculate number of full weeks passed this year
SET /A Week = %DoY% - %DoW% + 7
SET /A Week /= 7
SET Week
GOTO End
:DoW
SETLOCAL
:: Convert day of week to number (language dependent, modify if necessary!)
IF "%1"=="Mon" SET DoW=1
IF "%1"=="Tue" SET DoW=2
IF "%1"=="Wed" SET DoW=3
IF "%1"=="Thu" SET DoW=4
IF "%1"=="Fri" SET DoW=5
IF "%1"=="Sat" SET DoW=6
IF "%1"=="Sun" SET DoW=7
ENDLOCAL & SET DoW=%DoW%
GOTO:EOF
:DoY
SETLOCAL
SET DoM=%1
:: Remove leading zero
IF "%DoM:~0,1%"=="0" IF %DoM% GTR 0 SET /A DoM = 1%DoM% - 100
SET Month=%2
:: Remove leading zero
IF "%Month:~0,1%"=="0" IF %Month% GTR 0 SET /A Month = 1%Month% - 100
SET Year=%3
:: Determine leap day
SET LeapYear=0
SET /A Leap = %Year% %% 4
IF %Leap% EQU 0 SET LeapYear=1
SET /A Leap = %Year% %% 100
IF %Leap% EQU 0 SET LeapYear=0
SET /A Leap = %Year% %% 400
IF %Leap% EQU 0 SET LeapYear=1
:: Add the days of each full month passed
IF %Month% GEQ 1 SET /A Days2Add = 0
IF %Month% GEQ 2 SET /A Days2Add += 31
IF %Month% GEQ 3 SET /A Days2Add += 28
IF %Month% GEQ 3 SET /A Days2Add += %LeapYear%
IF %Month% GEQ 4 SET /A Days2Add += 31
IF %Month% GEQ 5 SET /A Days2Add += 30
IF %Month% GEQ 6 SET /A Days2Add += 31
IF %Month% GEQ 7 SET /A Days2Add += 30
IF %Month% GEQ 8 SET /A Days2Add += 31
IF %Month% GEQ 9 SET /A Days2Add += 31
IF %Month% GEQ 10 SET /A Days2Add += 30
IF %Month% GEQ 11 SET /A Days2Add += 31
IF %Month% GEQ 12 SET /A Days2Add += 30
:: Add it all up and return the calculated value
SET /A DoY = %Days2Add% + %DoM%
ENDLOCAL & SET DoY=%DoY%
GOTO:EOF
:End
ENDLOCAL
page last modified: 2024-04-16; loaded in 0.0096 seconds