Batch file to only run on specified date

Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

gurutech

Thread Starter
Joined
Apr 23, 2004
Messages
2,960
I have a batch file that runs every day, which is fine, but there are certain parts of it that I want to run on a certain date. If it's not that certain date, then skip over that part of the batch file.

I know how to use the "goto" command to redirect the batch file to the proper section, but how do I check the date in a batch file?

Thanks in advance!
 
Joined
Aug 7, 2007
Messages
9,028
%date% will give you the current date in a batch file. You can use an if statement to check it.
The format will be the same as your regional settings, so it depends on your settings and what exactly you want to check, say skip a part every saturday/sunday, or skip on the 5th, 10th, 15th, etc.
Couple of ways to break down the data, either use set (see set /?) to extract a substring (can be iffy if your system doesn't always use 2 digits for month/day), or a FOR statment with the proper delimiters
For example on my system %date% is Fri 03/28/2008, so:
Set _day=%date:~0,3% would set _day to Fri
set _date=%date:~7,2% would set _date to 28
If your settings don't display a leading zero, then this last one won't work consistantly because the position in the string changes. Better to use FOR in that case.

This FOR statement will parse the %date% value using a space and / as delimiters, and puts all 4 values into separate variables:
for /f "tokens=1-4 delims=/ " %%I in ("%date%") do Set _Day=%%I & Set _Month=%%J & Set _Date=%%K & Set _Year=%%L
If you just need one value (say the date), change the tokens=1-4 to tokens=3 and just use set _date=%%I.
If your settings don't display the day of the week, remove the space between the / and " after delims=

See for /? for info on those options.

HTH

jerry
 

gurutech

Thread Starter
Joined
Apr 23, 2004
Messages
2,960
Thanks Jerry - I was actually able to do this with just a line:

if "%date%!" == "Tue 04/01/2008!" goto PRANK

(guess what I'm doing to my boss on Tues... LOL)
 

Keebellah

Hans
Trusted Advisor
Joined
Mar 27, 2008
Messages
6,639
I have a batch file that runs every day, which is fine, but there are certain parts of it that I want to run on a certain date. If it's not that certain date, then skip over that part of the batch file.

I know how to use the "goto" command to redirect the batch file to the proper section, but how do I check the date in a batch file?

Thanks in advance!
Hi there,
I could not help but notice your post.

I have some vbs code (requires WSCRIPT to be allowed) that sets a number op environment variables which you can use to create folders, logs, whatever, look into these maybe they can be of use.

Create a directory C:\BAT (or anything you wish and wherever you wish)
You will need to create the following files:
Setvars.vbs
GetEm.Bat
EnvShow.Bat

Alls codes to be found hereunder:

Setvars.vbs

dtUur = Right("0" & hour(time),2)
dtMin = Right("0" & Minute(time) ,2)
dtTijd = dtUur & ":" & dtMin

Years = year(date)
Months = Right("0" & datepart("m",date),2)
Days = Right("0" & datepart("d",date),2)

WeekNr = wNumber(year(date), month(date), day(date))
If Int(WeekNr / 2) = WeekNr /2 Then WeekOdd = "NO" Else WeekOdd = "YES"


Public Const cHideWindow = 0, cNormalWindow = 1
Set WSHShell = Wscript.CreateObject("WScript.Shell")
Set FSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set EnvVar = wshShell.Environment("Process")

tQ1 = Kwartaal(date)

tQ2 = Kwartaal( date + 1)

tempFile= EnvVar("TEMP") & "\EnvVars.bat"
Set File2Write = fso.createtextfile(tempFile,1)
File2Write.writeline("Set Hour=" & DtUur )
File2Write.writeline("Set Time=" & dtUur & ":" & dtMin)
File2Write.writeline("set Year=" & Years)
File2Write.writeline("set Month=" & Months)
File2Write.writeline("set MonthDay=" & Months & Days)
File2Write.writeline("set YYYYMMDD=" & Years & Months & Days )
File2Write.writeline("set MMDDJJJJ=" & Months & "-" & Days & "-" & Years)
File2Write.writeline("set YearMonth=" & Years & Months)
File2Write.writeline("set Today=" & Days & "-" & Months & "-" & Years )
File2Write.writeline("set WeekNr="& WeekNr)
File2Write.writeline("set WeekOdd="& WeekOdd)
File2Write.writeline("set Quarter="& tQ2 - tQ1)
File2Write.writeline("set StartDate=" & right("0" & day(date-6),2) & "-" & right("0" & month(date-6),2) & "-" & year(date-6))
File2Write.writeline("set StopDate=" & right("0" & day(date-1),2) & "-" & right("0" & month(date-1),2) & "-" & year(date-1))
File2Write.close

tempFile= EnvVar("TEMP") & "\OK.txt"
Set File2Write = fso.createtextfile(tempFile,1)
File2Write.close


Wscript.Quit


function WNumber(Y, M, D)
dim N, Tdy, Thu, SoY, YNo, WNo, DoW
N = 2
Tdy = DateSerial(Y, M, D) '' Date, args
Thu = ((Tdy+3+N) \ 7) * 7 - N '' Nearest Thu
YNo = Year(Thu)
SoY = DateSerial(YNo, 1, 1) '' Date, YYYY-01-01
WNo = ((Thu - SoY) \ 7) + 1
WNumber = Right(100+WNo,2) '' always return two digits
end function

Function Kwartaal(tDate)
mnd = Month(tDate)
If mnd = 1 Or mnd = 2 Or mnd = 3 Then
Kw = 1
ElseIf mnd = 4 Or mnd = 5 Or mnd = 6 Then
Kw =2
ElseIf mnd = 7 Or mnd = 8 Or mnd = 9 Then
Kw = 3
Else
Kw = 4
End If
Kwartaal = Kw
End Function

GetEm.Bat
@echo off
rem This file calls SetVars.vbs, make sure the path exists in my case C:\Bat
rem First it deletes the files if they exist
rem Setvars.vbs creates two (2) files in the user's TEMP foldeer
rem OK.txt
rem EnvVars,bat
rem this batchfile loops until the %TEMP%\OK.txt is created
rem Then it calls EnvVars.bat to have the varaiables active for use
rem To view the values run EnvShow.bat

if exist %TEMP%\Ok.txt del %TEMP%\Ok.txt
if exist %TEMP%\EnvVars.Bat del %TEMP%\EnvVars.bat
:waitloop
Wscript C:\Bat\SetVars.vbs
if not exist %TEMP%\OK.txt goto waitloop
CALL %TEMP%\EnvVars.Bat

To see the results Wacht the C:\BAT path I use and make it your path

EnvShow.bat

@Echo off
call C:\Bat\GetEm.Bat
call %temp%\EnvVars.bat
echo %date% %time%
Echo HOUR=%hour%
Echo TIME=%Time%
Echo YEAR=%year%
Echo MONTH=%month%
Echo MONTHDAY=%monthday%
Echo YYYYMMDD=%yyyymmdd%
Echo YEARMONTH=%yearmonth%
Echo MMDDJJJJ=%MMDDJJJJ% format is mm dd yyyy
Echo TODAY=%today% format is dd mm yyyy
Echo WEEKNR=%WeekNr% Is Week ODD? WEEKODD=%WEEKODD%
Echo QUARTER=%quarter% (if value = 1 then tomorrow is a new Quarter)

Echo StartDate=%startdate%
Echo StopDate=%stopdate%

pause

Questions???

Just ask.
 
Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

As Seen On
As Seen On...

Welcome to Tech Support Guy!

Are you looking for the solution to your computer problem? Join our site today to ask your question. This site is completely free -- paid for by advertisers and donations.

If you're not already familiar with forums, watch our Welcome Guide to get started.

Join over 807,865 other people just like you!

Latest posts

Members online

Top