Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.
echo %date%
@echo offecho Wscript.echo eval(WScript.Arguments(0))>evaluate.vbsFor /f "delims==" %%N in ( ' cscript //nologo evaluate.vbs "weekday(date)" ' ) do set daynumber=%%NFor /f "delims==" %%D in ( ' cscript //nologo evaluate.vbs "weekdayname(weekday(date))" ' ) do set dayofweek=%%Decho Today is Day %daynumber% %dayofweek%For /f "delims==" %%N in ( ' cscript //nologo evaluate.vbs "weekday("1/1/2009")" ' ) do set daynumber=%%NFor /f "delims==" %%D in ( ' cscript //nologo evaluate.vbs "weekdayname(weekday("1/1/2009"))" ' ) do set dayofweek=%%Decho Jan 1st 2009 was day %daynumber% %dayofweek%del evaluate.vbs
Today is day 1 SundayJan 1st 2009 was day 7 Saturday
@echo offclsecho %date:~0,4%pause>nulexit
echo %date:~0,4%
C:\>echo %date:~0,4%15/0
C:/>echo %date:~0,4%Sun
@echo offclsecho %date%pause>nulexit
and there is a shorter solution using debug + batch, but someone will come and say "I Hate Debug"
is there a way of doing this with just the straight batch code?
To calculate the day on which a particular date falls, the following algorithm may be used (the divisions are integer divisions, in which the remainders are discarded): a = (14 - month) / 12 y = year - a m = month + 12 * a - 2 d = (day + y + y / 4 - y / 100 + y / 400 + (31 * m / 12) % 7 The value of d is 0 for a Sunday, 1 for a Monday, 2 for a Tuesday, etc.
@echo offREM Get day, month, year from %date%REM Assumes %date% format is dd/mm/yyyyREM E.g. on 16 March 2009 %date% expands to 16/03/2009 Set day=%date:~0,2%Set month=%date:~3,2% Set year=%date:~6,4%REM If day and/or month have a leadingREM zero, make the number hexadecimal toREM avoid set /a making 08 & 09 into REM nonsense octal values and stoppingREM with error messageif "%day:~0,1%"=="0" set day=0x%day%if "%month:~0,1%"=="0" set month=0x%month%REM Implement algorithmset /a a=(14-%month%)/12set /a y=%year%-%a%set /a m=%month%+12*%a%-2set /a DayOfWeekNumber=(%day% +%y% + %y% / 4 - %y% / 100 + %y% / 400 + (31 * %m% / 12)) %% 7REM Get day name from numberif %DayOfWeekNumber% EQU 0 set DayOfWeekName=Sundayif %DayOfWeekNumber% EQU 1 set DayOfWeekName=Mondayif %DayOfWeekNumber% EQU 2 set DayOfWeekName=Tuesdayif %DayOfWeekNumber% EQU 3 set DayOfWeekName=Wednesdayif %DayOfWeekNumber% EQU 4 set DayOfWeekName=Thursdayif %DayOfWeekNumber% EQU 5 set DayOfWeekName=Fridayif %DayOfWeekNumber% EQU 6 set DayOfWeekName=SaturdayREM Day of week number and name are in 2 variablesecho Day of week (number) is %DayOfWeekNumber%echo Day of week (name) is %DayOfWeekName%
the first solution you post at 1:50 failed on year<1900 and year>2100
REM Get day name from numbersetlocal enabledelayedexpansionset num=0for %%D in (Sun Mon Tues Wednes Thurs Fri Satur) do ( if !num! EQU %DayOfWeekNumber% set DayOfWeekName=%%Dday set /a num+=1 )