Windows批处理脚本仅保留目录中的N个最新文件夹

2024-02-06

我有一个目录,我将 MySQL 数据库备份到具有当前日期的文件夹中。

现在,30 或 60 天后,我喜欢只保留该备份目录中的 n 个最新文件夹,并删除其余文件夹,每个文件夹中都有 gzip 压缩的数据库。

为了备份我使用的 MySQL 数据库adityasatrio的批处理脚本 https://gist.github.com/adityasatrio/507585a9c66d7f08fe09并且使用当前日期创建文件夹也已排序感谢这个答案 https://stackoverflow.com/questions/31787056/windows-batch-file-to-backup-local-mysql-databases-only-keep-n-latest-folders.

然而,就本示例而言,仅保留最新的 3 个文件夹并删除备份目录中的所有其他文件夹似乎很困难。

这是我尝试过的。

 :: deletes all files and folders in the backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b /o-d') do echo del "%backupDir%\%%a"


 :: deletes only files in backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b /a-d') do echo del "%backupDir%\%%a"


 :: deletes all files and folders BUT keeps 3 latest FOLDERS in backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b') do echo del "%backupDir%\%%a"


 :: deletes all files and folders BUT keeps 3 latest FOLDERS in backupDir
 :: for /f "skip=3 delims=" %%a in (' dir "%backupDir%\" /o-d /b') do echo rd /S /Q "%backupDir%\%%a"

请注意,我不想删除该 backupDir 中可能存在的任何文件。我删除了 backupDir 中除最新 3 个文件夹之外的所有文件夹,因此基本上删除了其中包含 gzipped .sql 文件的旧文件夹。

这些问题有所帮助,但我仍然没有做得正确。

删除除 X 个最近的文件夹之外的所有文件夹 https://stackoverflow.com/questions/18553694/delete-all-but-x-most-recent-folders

如何从目录中删除旧文件,同时在 Windows 上保留最新文件 https://stackoverflow.com/questions/50902/how-do-i-delete-old-files-from-a-directory-while-keeping-the-most-recent-ones-on(文件而不是文件夹)

批处理文件删除超过N天的文件 https://stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days(再次强调,文件不是文件夹)

https://serverfault.com/questions/49614/delete-files-older-than-x-days https://serverfault.com/questions/49614/delete-files-older-than-x-days(为了更好地衡量,再次强调文件而不是文件夹..)

这条评论删除除 X 个最近的文件夹之外的所有文件夹 https://stackoverflow.com/questions/18553694/delete-all-but-x-most-recent-folders#comment46957275_18554479最接近我想要做的事情,但这也会删除 backupDir 中可能存在的任何文件。

**编辑1:**刚刚发现删除 Windows 中除 2 个最新文件夹之外的所有文件夹 https://stackoverflow.com/questions/17521372/delete-all-folders-except-2-lastest-folders-in-windows并会看看这是否有任何帮助。

下面是我微薄之力的完整脚本popd在这儿。我希望在您的帮助或意见下解决这个问题以供进一步阅读。注意我对批处理脚本完全陌生。非常感谢对此的任何帮助。请帮我删除除这 N 个最新文件夹之外的所有文件夹。 :)

     @echo off

 set dbUser=root
 set dbPassword=root
 set "backupDir=D:\MySQLDumps"
 set "mysqldump=C:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump.exe"
 set "mysqlDataDir=C:\wamp\bin\mysql\mysql5.6.17\data"
 set "zip=C:\Program Files\7-Zip\7z.exe"

rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') 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 "MS=%dt:~15,3%"

 set "dirname=%YYYY%-%MM%-%DD% %HH%-%Min%-%Sec%"

 echo "dirName"="%dirName%"
 :: pause

 :: switch to the "data" folder
 pushd "%mysqlDataDir%"

 :: create backup folder if it doesn't exist
 if not exist "%backupDir%\%dirName%\" mkdir "%backupDir%\%dirName%"

 :: iterate over the folder structure in the "data" folder to get the databases

 for /d %%f in (*) do (
 echo processing folder "%%f"

 "%mysqldump%" --host="localhost" --user=%dbUser% --password=%dbPassword% --single-transaction --add-drop-table --databases %%f > "%backupDir%\%dirName%\%%~nxf.sql"

 "%zip%" a -tgzip "%backupDir%\%dirName%\%%~nxf.sql.gz" "%backupDir%\%dirName%\%%~nxf.sql"

  del "%backupDir%\%dirName%\%%~nxf.sql"

 )
 popd

 :: delete all folders but the latest 3


 :: deletes all files and folders in the backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b /o-d') do echo del "%backupDir%\%%a"


 :: deletes only files in backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b /a-d') do echo del "%backupDir%\%%a"


 :: deletes all files and folders BUT keeps 3 latest FOLDERS in backupDir
 :: for /f "skip=3 delims=" %%a in ('dir "%backupDir%\" /b') do echo del "%backupDir%\%%a"


 :: deletes all files and folders BUT keeps 3 latest FOLDERS in backupDir
 :: for /f "skip=3 delims=" %%a in (' dir "%backupDir%\" /o-d /b') do echo rd /S /Q "%backupDir%\%%a"

pause

这两条不同的线路起作用。保留 backupDir 中可能存在的所有文件,同时仅删除选定的 N 个最新 nameDir 文件夹。

这是根据@JosefZ 的评论调整的Windows批处理脚本仅保留目录中的N个最新文件夹 https://stackoverflow.com/questions/31796149/windows-batch-script-to-only-keep-the-n-latest-folders-in-a-directory?noredirect=1#comment51539809_31796149

for /f "skip=2 delims=" %%a in ('dir "%backupDir%\" /B /O:-N /A:D') do echo rd rd /s /q "%backupDir%\%%a"

这也可以从@Magoo's 答案中获取https://stackoverflow.com/a/17521693/1010918 https://stackoverflow.com/a/17521693/1010918

for /f "skip=2 delims=" %%a in (' dir "%backupDir%\" /b /ad-h /o-d') do rd /s /q "%backupDir%\%%a"

在这里找到完整的工作批处理脚本如果你喜欢。

感谢大家的帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows批处理脚本仅保留目录中的N个最新文件夹 的相关文章

随机推荐

  • gulp 和 karma,文件 karma.conf.js 不存在

    我有一个基本的 AngularJS 应用程序 希望让我的所有终端命令都通过 gulp 任务运行 例如 gulp dev对于开发服务器和 gulp unitTest用于测试等 我已经按照文档安装了 Gulp npm install save
  • 将驱动器号转换为分区 ID/磁盘 ID

    给定驱动器盘符 我如何获得OSImage安装到分区ID http technet microsoft com en us library ff716430 aspx and Disk ID http technet microsoft co
  • BCC 发送 PHP mail() 到邮件列表的方式与 TO 不同吗?

    我正在改进 PHP 邮件列表代码 使用mail 在循环中迭代所有订阅者 该脚本用于显示 超出最大执行时间 30 秒 错误 我通过添加解决了该错误set time limit 0 现在没有错误 但发送 100 条消息花了大约七分钟 我有什么选
  • 如何了解System.Windows.Forms.dll中System.InvalidOperationException的详细信息?

    运行我的应用程序时 我在 Visual Studio 的 输出 面板中发现了下面的异常日志 System Windows Forms dll 中发生 System InvalidOperationException 类型的第一次机会异常 该
  • 动态像素化 html 图像元素

    我要在网页上拍摄图像 然后使用 javascript 或最适合的任何内容 对其进行动态 像素化 例如 变成 20px 的正方形 然后 当用户向下滚动页面时 我需要图像的分辨率逐渐增加 直到它不再像素化 我有什么想法可以去做这件事吗 我意识到
  • PayPal Express Checkout 集成响应

    我目前很难理解我的 PayPal EC 集成的响应 GetExpressCheckoutDetails 响应是 CHECKOUTSTATUS gt PaymentActionNotInitiated 但在 DoExpressCheckout
  • WPF设计问题(自定义控件或mvvm)

    这是场景 我有一个显示一些数据的视觉效果 The data to the visual can come in one of two ways 通过用户通过键盘或鼠标输入 通过一些后端源 Both these data inputs can
  • WooCommerce 上的购物车总重量和运输重新计算

    我正在尝试使用一个片段将我的自定义盒子重量添加到总订单重量中 目前工作正常 但是 不会根据重新计算的片段重量重新计算运输方式 有什么想法如何强制重新计算运费吗 add filter woocommerce cart contents wei
  • 完全删除 MySQL 5.7 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试从 ubuntu 12 04 中完全卸载 mysql 但没能做到 我尝试了很多命令 但没有任何作用 任何人都可以帮忙吗 sudo apt g
  • 用于对基于时间的值进行排序的 Redis 数据结构设计

    我正在对数据流执行一些分析并将结果发布到 Redis 通道上 消费者订阅这些频道并获取实时数据源 所有历史数据分析结果都会丢失 现在我想添加在Redis中存储历史数据的能力 以便消费者可以查询这些历史数据 主要是按时间 由于分析结果按时间分
  • 如何在一项任务中执行多个 gulp 命令

    我很难理解如何在单个任务中处理多个 gulp 源 在这样的任务中 gulp task task1 function cb gulp src src js pipe gulp dest dist gulp src src css pipe g
  • 如何将 Linux shell 脚本编译为独立的可执行文件*二进制*(即不仅仅是 chmod 755)?

    我正在寻找一个免费的开源工具集 可以编译各种 经典 脚本语言 例如Korn Shell ksh csh bash 等作为可执行文件 如果脚本调用其他程序或可执行文件 则将它们包含在单个可执行文件中 Reasons 混淆交付给客户的代码 以免
  • 快速修复/n 错误:MsgSeqNum 太高

    我已经使用 QuickFIX n is v1 4 0 从此 创建了一个修复应用程序 http www quickfixn org download http www quickfixn org download 地点 当我执行应用程序时 我
  • 反序列化 xml,包括命名空间

    我正在尝试反序列化一些 XML 但无法获取名称空间 xsi type Model 上班 如果xsi type Model 被排除在 XML 之外 它可以工作 但它必须存在 如果我将命名空间保留在模型之外 则会收到错误 如果重命名它 则会得到
  • AngularJS 拦截并扩展控制器 $scope

    我在应用程序中定义了许多可重用的功能 每个控制器都与 scope 变量一起使用 有没有办法扩展 scope 变量 以便我可以在任何地方使用我的扩展代码 而不是每次都创建共享服务 就像是 I ve tested this out and it
  • 我希望我的 Android 应用程序仅在纵向模式下运行?

    我希望我的 Android 应用程序仅在纵向模式下运行 我怎样才能做到这一点 在清单中 为您的所有活动进行设置
  • PyDev 的导入错误

    我使用 PyDev Eclipse 已有几个月了 并且在导入时遇到了相同的错误 PyDev 在导入中用红色下划线并说Unresolved import xxx Found at yyy 当我点击yyyeclipse找到并打开该模块的执行 P
  • 安装了jSweet。怎么办?

    我有一个java项目 我想将其转换为Typescript 大约150个文件 As per http www jsweet org getting started http www jsweet org getting started 我查看
  • iPhone开发配置助手第3步公钥/私钥问题

    您好 我正在使用开发配置助手 在第 3 步 在 钥匙串访问 中验证您的私钥和公钥时 我在 钥匙串 gt 登录 中有 iPhone 开发人员 XXXXXXX 证书 但找不到任何密钥 如果我单击 类别 gt 键 我什么也看不到 我应该怎么做才能
  • Windows批处理脚本仅保留目录中的N个最新文件夹

    我有一个目录 我将 MySQL 数据库备份到具有当前日期的文件夹中 现在 30 或 60 天后 我喜欢只保留该备份目录中的 n 个最新文件夹 并删除其余文件夹 每个文件夹中都有 gzip 压缩的数据库 为了备份我使用的 MySQL 数据库a