【问题标题】:How to do a backup with .bat with windows? [closed]如何在 Windows 中使用 .bat 进行备份? [关闭]
【发布时间】:2023-03-20 14:55:01
【问题描述】:

我有一个文件 .bat 进行备份,但我想做另一个文件 .bat 来删除最旧的文件。有人可以帮助我吗?

set dia=%DATE:~0,2%
echo %dia%
if exist f:\exist.txt goto OK
echo KKKKKKKKKK
pause
exit

:OK
md f:\backup
md f:\backup\%dia%
xcopy d:\dat\*.* f:\backup\%dia%\*.* /s /c /h /r /e /y /j
echo TODO OK
pause


【问题讨论】:

  • 我会推荐 robocopy 查看 cmd robocopy /? 因为它可以保持文件同步而无需重新创建文件。
  • 类似robocopy "C:\source\" Z:\dest" /MIR /Z 如果您确实需要多个备份目录才能恢复到较旧的备份,请告诉我,我可以告诉您如何操作。通常,您只会留下 3 或 4 个日期的文件。
  • 需要说明的是,您对这个站点并不陌生,所以一定已经使用了tour,并通读了How to Ask 及其包含的每个链接页面。所以你的问题很清楚,你想创建一个.bat 文件,它从目录或树中删除最旧的文件。您发布完全不相关的代码是为了什么?您为删除这些文件而编写的代码在哪里?本网站不是代码请求服务,如果您在问题中省略了代码,我们无法帮助您解决代码中指定的可重现问题。 您的问题在当前状态下与 StackOverflow 无关。

标签: windows batch-file backup


【解决方案1】:

请仔细阅读!该脚本在rmdir 行中有一个安全措施echo。在您 100% 确定脚本执行您想要的操作之前,请不要删除它。

@echo off
for /f "tokens=2 delims=.=" %%i in ('wmic os get localdatetime /value') do set result=%%i
set "mydate=%result:~0,8%"
robocopy "d:\dat" "f:\backup\%mydate%" /MIR /Z
for /f "skip=4 delims=" %%a in ('dir /b /ad /o-d "f:\backup\"') do echo rmdir /S/Q "%%~fa"
pause

所以脚本会在每次运行时为每个日期yyyymmmdd 创建一个文件夹,如果该文件夹已经存在,即您在一天内运行了两次备份,它只会更新文件而不重新创建任何文件夹,如果它们存在。

你必须小心的第二个 for 循环。它将按降序日期对文件夹进行排序,即最新创建的文件夹将首先列出。所以你会在这里看到我有skip=4,这意味着它将跳过前 4 个最新文件夹,并删除其余文件夹。因此,如果您想保留两个最新备份,请执行skip=2 等操作。

要将日期仅修改为yyyymm,请更改为set "mydate=%result:~0,6%"。你明白了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多