@echo off
setlocal enabledelayedexpansion
set BACKUP=D:\backup
set TMP=D:\QB_TMP
set SRC=SharedFiles\Quickbooks DATA
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set DT=%%i
set ZIP=%BACKUP%\backup_%DT%.zip
if not exist "%TMP%" mkdir "%TMP%"
if not exist "%BACKUP%" mkdir "%BACKUP%"
echo =====================================
echo 1. Create VSS snapshot
echo =====================================
(
echo SET CONTEXT PERSISTENT NOWRITERS
echo ADD VOLUME D: ALIAS QBVOL
echo CREATE
echo EXPOSE %%QBVol%% X:
) > "%TMP%\vss.txt"
diskshadow /s "%TMP%\vss.txt"
echo =====================================
echo 2. Copy from VSS (X:)
echo =====================================
robocopy "X:\%SRC%" "%TMP%" *.qbw* /R:1 /W:1
echo =====================================
echo 3. Remove snapshot (safe)
echo =====================================
echo DELETE SHADOWS ALL > "%TMP%\vss_del.txt"
diskshadow /s "%TMP%\vss_del.txt"
echo =====================================
echo 4. Compress with PowerShell
echo =====================================
powershell -NoProfile -Command ^
"Compress-Archive -Path '%TMP%\*' -DestinationPath '%ZIP%' -Force"
echo =====================================
echo 5. Cleanup temp
echo =====================================
rmdir /s /q "%TMP%"
echo =====================================
echo 6. Keep last 10 backups
echo =====================================
cd /d "%BACKUP%"
for /f "skip=10 delims=" %%f in ('dir backup_*.zip /b /o-d') do ( del "%%f"
)
echo DONE
endlocal