我有一个每小时运行一次的批处理脚本。它连接到 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 命令的更多信息,这是页面链接。