1. Computer problem? Tech Support Guy is completely free -- paid for by advertisers and donations. Click here to join today! If you're new to Tech Support Guy, we highly recommend that you visit our Guide for New Members.

Batch file to only run on specified date

Discussion in 'DOS/Other' started by gurutech, Mar 28, 2008.

Thread Status:
Not open for further replies.
Advertisement
  1. gurutech

    gurutech Thread Starter

    Joined:
    Apr 23, 2004
    Messages:
    2,959
    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!
     
  2. TheOutcaste

    TheOutcaste

    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
     
  3. gurutech

    gurutech Thread Starter

    Joined:
    Apr 23, 2004
    Messages:
    2,959
    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)
     
  4. Keebellah

    Keebellah Hans Trusted Advisor

    Joined:
    Mar 27, 2008
    Messages:
    5,960
    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.
     
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 733,556 other people just like you!

Loading...
Thread Status:
Not open for further replies.

Short URL to this thread: https://techguy.org/697927