While doing batch scripts for Windows you may need to get yesterday's date. This is particularly useful, when e.g. you want to zip yesterday's logs and, for example upload to a safe place.

Here is the script that does this for me:

@echo off
rem Source code from: http://wojwa.com
rem This script prints out yesterday's date.

set yyyy=
set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
 for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
    set %%x=%%u
    set %%y=%%v
    set %%z=%%w
    set $d1=
    set $tok=))

if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

rem You may need to update this for the language you use
if "%mm%"=="Jan" set mm=01
if "%mm%"=="Feb" set mm=02
if "%mm%"=="Mar" set mm=03
if "%mm%"=="Apr" set mm=04
if "%mm%"=="May" set mm=05
if "%mm%"=="Jun" set mm=06
if "%mm%"=="Jul" set mm=07
if "%mm%"=="Aug" set mm=08
if "%mm%"=="Sep" set mm=09
if "%mm%"=="Oct" set mm=10
if "%mm%"=="Nov" set mm=11
if "%mm%"=="Dec" set mm=12

set CurDate=%mm%/%dd%/%yyyy%
set dayCnt=%1

if "%dayCnt%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

:CHKDAY
if /I %dd% GTR 0 goto DONE

set /A mm=%mm% - 1

if /I %mm% GTR 0 goto ADJUSTDAY

set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
REM ** Month 12 falls through

:SET31
set /A dd=31 + %dd%
goto CHKDAY

:SET30
set /A dd=30 + %dd%
goto CHKDAY

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto CHKDAY

:SET29
set /A dd=29 + %dd%
goto CHKDAY

:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%

echo Today is %curdate%, yesterday was %mm%/%dd%/%yyyy:~2,2%
echo You can also change the format to for example this: %dd%%mm%%yyyy:~2,2%

Now name this script yesterday.bat. To get the output of this script to a batch variable you will need to use this awkward construction:

for /f "delims=" %%a in ('yesterday.bat') do @set yesterday=%%a

and now you can use the variable yesterday to, e.g. invoke 7zip to zip your files:

"C:\Program Files\7-Zip\7z.exe" a "%computername%_%yesterday%_backup.zip" "C:\Logs to zip\log_%yesterday%_*.log"

I hope you'll find this helpful. Enjoy! :)