批处理:备份,然后删除旧备份

批处理:备份,然后删除旧备份

我有一个每小时运行一次的批处理脚本。它连接到 FTP 服务器,下载备份文件,然后删除最旧的备份(默认情况下备份保留 4 小时)。这是为了使我们的设施免受连接丢失的影响。我注意到,一个设施失去了互联网,无法使用这些备份,因为脚本在连接断开 4 小时后删除了所有旧备份。我如何修改此脚本以仅在下载新备份时删除最旧的备份?

echo off

set FTPADDRESS=[omitted]
set FTPLOGIN=[omitted]
set FTPPASSWORD=[omitted]
set DIRECTORY=[omitted]

set BACKUP_FILE=emar_backup.zip
set DELETE_OLD_FILES_MIN=240

echo cd %DIRECTORY% > commands.txt
echo get %BACKUP_FILE% .\downloads\%BACKUP_FILE% >> commands.txt
echo put receipt.txt >> commands.txt
echo bye >> commands.txt

for /f "tokens=1 delims=" %%A in ('cscript //nologo getdate.vbs') do SET yymmdd_hhmmss=%%A

psftp.exe -2 -batch -b commands.txt -l %FTPLOGIN% -pw %FTPPASSWORD% %FTPADDRESS% > .\logs\lastlog.txt

cd downloads
if exist %BACKUP_FILE% ren %BACKUP_FILE% %BACKUP_FILE%-%yymmdd_hhmmss%.zip
..\DelOld.exe /f=* /m=%DELETE_OLD_FILES_MIN%
cd ..

提前感谢您做出的任何贡献!

答案1

如果您已经使用批处理文件创建了自己的备份,则需要添加一个简单的开关。例如:

xcopy "c:\myfolder\*.*" "e:\myfolder\*.*" /s /d /f /y
  • Switch/S复制文件夹的所有子目录。
  • Switch/d将仅复制自上次备份以来修改过的文件。(此开关将用较新的信息覆盖文件)。您还可以使用 Switch /d:2/1/2020 来设置要查找的日期。我发现 /d 更好,因为您可能会错过上次备份日期和指定日期之间发生的新更改。
  • Switch/f显示正在复制的文件、其位置和目的地。
  • Switch/y会自动覆盖旧文件,而无需每次都询问您。

我发现通过进行多次增量备份,我的备份文件可以保持最新状态,而无需浪费时间。无需清除任何旧文件,因为批处理命令会用较新的信息替换它们。

如果您需要有关 xcopy 命令的更多信息,这是页面链接

相关内容