Я расширил ответ Каран, сохранив архив резервных копий в последний раз
Пакет Windows очень ограничен, и я мог заставить этот сценарий работать только с помощью NirCmd - инструмента командной строки Windows
Так что это пакетный скрипт, который использует 7-zip и NirCmd для создания резервных архивов или обновления их только в том случае, если исходный каталог был изменен, при этом время изменения архива было сохранено, чтобы другие программы не могли обнаружить архив как измененный, что предотвращает нежелательные загрузки. ,
@ECHO OFF
SET BaseDir=c:\Users
SET BkpsDir=d:\Backup
IF NOT EXIST "7za.exe" GOTO ExitError
IF NOT EXIST "nircmd.exe" GOTO ExitError
SET TimeFile=%temp%\tmpCloneFileTimeFile.bkp
SET OutputFile=%temp%\tmpOutputFile.bkp
REM create a temporary file
copy /y NUL "%TimeFile%" 1>NUL
CALL :CompressDirIfChanged Public\Music PublicMusic.7z
CALL :CompressDirIfChanged Dragos\Favorites DragosFavorites.7z
DEL "%TimeFile%" /F /Q >nul 2>nul
DEL "%OutputFile%" /F /Q >nul 2>nul
ECHO.
ECHO SUCCESS
ECHO.
PAUSE
EXIT
goto:eof
REM call :CompressDirIfChanged sourceDirRelativeToBaseDir ArchiveName
:CompressDirIfChanged
SET BkpSrc="%~1"
SET ArchDest=%BkpsDir%\%~2
CD "%BaseDir%"
IF EXIST "%ArchDest%" (
nircmd.exe clonefiletime "%ArchDest%" "%TimeFile%"
7za.exe u -up1q0r2x1y2z1w2 -mx=9 "%ArchDest%" "%BkpSrc%" 1>"%OutputFile%"
IF errorlevel 1 GOTO ExitError
FINDSTR /bli /c:"Items to compress: 0" "%OutputFile%" && FINDSTR /bli /c:"Files read from disk: 0" "%OutputFile%" && (
ECHO - no changes in %BkpSrc%, restoring Last Modified Time
nircmd.exe clonefiletime "%TimeFile%" "%ArchDest%"
) || (
ECHO - updating %ArchDest%
)
) ELSE (
ECHO - creating %ArchDest%
7za.exe a -aoa -mx=9 "%ArchDest%" "%BkpSrc%" 1>nul
IF errorlevel 1 GOTO ExitError
)
goto:eof
:ExitError
ECHO ERROR!
PAUSE
EXIT 1
goto:eof