BATCH - 创建备份,然后在创建后删除旧备份

时间:2016-05-09 17:17:28

标签: batch-file backup

前提:

每隔n秒运行一次脚本,这将创建已定义文件到指定位置的备份。 创建n个备份后,清除(删除)过时的。

问题:

我已设法使用此版本来备份文件夹并删除较旧的版本,但是当我尝试使用特定文件“没有找到文件”时。 我现在已经摸不着头几个小时了,我可能会错过一些小事。 我不只是想删除所有.xlsx文件,例如,因为Target文件夹中可能存在多个不同的.xlsx文件。 如果有3个新版本可用,我只想删除旧版本的“File1”。

有什么事我能做到吗?我已尝试使用通配符,如下所示,但没有运气......

请帮助:(

瓦尔:

- Schedule=60 (Time inseconds between each backup)
- NumFiles=3 (How many backup versions to keep)
- File1Path=D:\Source (Location to copy files from)
- File1=backmeup.xlsx (Filename & extension)
- BackupPath=D:\Target (Location to copy files to)

代码段:

@echo off
Color 02
mode con: cols=150 lines=25

:Start
SET Schedule=60
SET NumFiles=3
SET File1Path=D:\Source
SET File1=backmeup.xlsx
SET BackupPath=D:\Target

echo Press any key to begin.
pause >nul
echo.

:Single1
FOR /F %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a
SET DateTime=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%@%DTS:~8,2%%DTS:~10,2%

IF DEFINED File1Path (
    xcopy "%File1Path%\%File1%" "%BackupPath%\_BACKUP_%DateTime%_%File1%*" /h /d /y /c /i /q /r /k >nul
    ( for /f "skip=%NumFiles% delims=" %%F in ('dir "%BackupPath%" /b /a:-dh /o:-d "%File1%"') do echo del /q "%BackupPath%\%%F"
    ( goto SingleDone ))) ELSE ( goto End )

:SingleDone
echo Backups created - %DateTime%
TIMEOUT /T %Schedule% /NOBREAK
GOTO Single1

:End
echo Something is not defined or incomplete.
echo Press any key to exit.
pause >nul
exit

1 个答案:

答案 0 :(得分:0)

要进行备份,简单的答案就是使用xcopy。要删除旧文件/目录,请使用以下命令

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"