当前位置: 首页 > 知识库问答 >
问题:

如何只保留五个最新的备份文件夹并删除旧的?

阴英武
2023-03-14

我想每天定期使用批处理文件进行备份。考虑以下文件夹:

C:\game folder
D:\backup1
D:\backup2
D:\backup3
D:\backup4
D:\backup5

游戏文件夹中有:

c:\game folder\remote\                       »Folder
c:\game folder\remote\remotecache.vdf        ».vdf file
c:\game folder\remote\FullProfile            »No extension file
c:\game folder\remote\ProfileSaves\          »Folder
c:\game folder\remote\ProfileSaves\1054678   »No extension file

我需要一个批处理文件

  • 验证backup1(文件夹或其中的任何文件)上的时间戳是否早于1天,如果是,则继续,否则停止;
  • 删除backup5文件夹或其内容;将backup4的文件夹/文件复制到backup5文件夹;
  • 删除backup4文件夹或其内容;将backup3的文件夹/文件复制到backup4文件夹;
  • 等直到backup1文件夹。
  • 最后将游戏文件夹复制到backup1文件夹。

有可能吗?

我的想法是运行一个计划任务(Windows),然后。bat文件验证是否需要备份

考虑到下面的代码,我应该放置什么才能使其像我之前描述的那样工作?

@echo off

echo  
echo ------------------------------------------------------------------
echo Daily script that backs-up game folder
echo ------------------------------------------------------------------

echo ------------------------------------------------------------------
echo Calculation of date
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set "dt=%%a"
set "YY=%dt:~2,2%"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%"
set "Min=%dt:~10,2%"
set "Sec=%dt:~12,2%"

set datestamp=%YYYY%%MM%%DD%
set timestamp=%HH%%Min%%Sec%
set fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%

如何在这里制作某种IF来检查backup1文件夹的时间戳,如果它早于1天,请运行下面的代码?如何设置@path

echo ------------------------------------------------------------------
echo Delete old backup folder
FORFILES -p "" /D -1 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"

echo ------------------------------------------------------------------
echo Make new Backup folder
md D:\Backup1 

echo ------------------------------------------------------------------
echo Copy files into backup folder
xcopy /s /y "C:\game folder" "D:\Backup1"

共有1个答案

凌俊材
2023-03-14

这个日常备份操作任务的简单批处理文件呢?

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "FolderToBackup=C:\game folder"
set "BackupParentFolder=D:"
set "BackupNamePrefix=Backup_"

if not exist "%FolderToBackup%\" goto EndBackup

rem Get region independent current date in format yyyy-MM-dd.
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "FolderNameDate=%%I"
set "TodayBackupFolder=%BackupParentFolder%\%BackupNamePrefix%%FolderNameDate:~0,4%-%FolderNameDate:~4,2%-%FolderNameDate:~6,2%"

rem Was a backup folder created already today?
if exist "%TodayBackupFolder%\" goto EndBackup

rem Create a backup of the folder to backup by doing a simple folder copy.
%SystemRoot%\System32\xcopy.exe "%FolderToBackup%" "%TodayBackupFolder%\" /C /H /I /K /Q /R /S /Y >nul

rem Keep only the newest 5 backup folders and delete all others.
for /F "skip=5 delims=" %%I in ('dir "%BackupParentFolder%\%BackupNamePrefix%????-??-??" /AD /B /O-N 2^>nul') do rd /Q /S "%BackupParentFolder%\%%I"

:EndBackup
endlocal

批处理文件接下来检查今天是否已经创建了备份文件夹,这很简单,因为备份日期以国际日期格式包含在文件夹名称中。批处理文件不执行其他操作

否则,将在已配置前缀的已配置父目录中备份要备份的文件夹<必须在批处理文件中指定code>BackupParentFolder,但根本无法定义BackupNamePrefix。

进行备份后,将执行DIR命令,以列出所有备份文件夹,其中备份日期按名称反向排序,即最新的备份文件夹按DIR第一个输出,最旧的最后一个输出。

忽略五个最新的备份并删除所有其他备份文件夹,这意味着通常从现有备份文件夹列表中删除一个目录。这个非常简单但非常有效的备份策略在Bat文件的回答中详细解释,仅在存在较年轻文件时删除文件。

要了解使用的命令及其工作方式,请打开命令提示窗口,在那里执行以下命令,并仔细阅读为每个命令显示的所有帮助页。

  • <代码>目录/

另请阅读Microsoft关于使用命令重定向运算符的文章,了解2的解释

 类似资料:
  • 我正在尝试使用 Jsoup 删除 HTML 页面标记之间的所有文本 例如,如果输入HTML是 输出应该是 基本上,我想删除返回的内容。 我找到了很多相反的帖子,只保留文本,但没有解决我的问题。知道怎么做吗? 编辑 maverick9999:https://stackoverflow.com/a/24292349/3589481提出的解决方案将解决大部分情况。 然而,正如评论中提到的,这个解决方案也

  • PS:我知道O(n^2),但这对我来说不是问题。

  • 问题内容: 我正在使用adityasatrio的批处理文件来备份本地MySQL数据库,并且希望仅保留30个最新的备份文件。在此示例中使用root:root。 现在,我对以下问题进行了很好的了解: 批处理文件以删除超过N天的文件 https://serverfault.com/questions/49614/delete-files-older-than-x- days 将7个最新文件保存在一个文件

  • 问题内容: 尝试删除不为空的文件夹时,出现“访问被拒绝”错误。我尝试使用以下命令:。 删除/删除不为空的文件夹/目录的最有效方法是什么? 问题答案: 标准库参考:shutil.rmtree。 根据设计,在包含只读文件的文件夹树上失败。如果要删除该文件夹而不管它是否包含只读文件,请使用

  • 问题内容: 如何在Python中删除本地文件夹的内容? 当前项目适用于Windows,但我也希望看到* nix。 问题答案:

  • 我正在寻找一个简单的批处理脚本,它将允许我删除旧文件并记录它是否删除了旧文件。搜索完网站后,我发现“forfiles”非常有用: 来自:批处理文件以删除超过N天的文件 正如我所说,我关心的是记录已删除的内容。我尝试了很多东西,但仍然不起作用。这是我的实际代码: 日志文件已创建,但为空,旧文件不会被删除。(它应该删除我2016年的8个文件)当我使用原始代码时,它会删除文件。我可能读过关于逃离 目标是