我有一个目录,我将MySQL数据库备份到当前date的文件夹中。
现在,在30或60天后,我只想保留该备份目录中的n个最新文件夹,并删除剩余的文件夹,每个文件夹中都有gzip文件夹。
为了备份MySQL的数据库我使用adityasatrio的批处理脚本和创build与当前date的文件夹也sorting感谢这个答案 。
但是,为了这个例子,只保留最新的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%\" /od /b') do echo rd /S /Q "%backupDir%\%%a"
请注意我不想删除可能在backupDir中的任何文件。 我删除了所有,但最新的3个文件夹在backupDir后,基本上删除与他们的gzipped .sql文件的旧文件夹。
这些问题虽然有所帮助,但我仍然没有正确地做到这一点。
删除X最近的文件夹
如何从一个目录中删除旧文件,同时保持最新的文件在Windows上 (文件不是文件夹)
batch file删除N天以前的文件 (再次,文件不是文件夹)
https://serverfault.com/questions/49614/delete-files-older-than-x-days (为好措施,再次文件不是文件夹..)
这个注释删除了除X之外的所有最近的文件夹 ,与我正在尝试执行的操作最为接近,但是也删除了可能位于backupDir中的所有文件。
** edit1:**刚刚find删除除Windows中最新的文件夹的所有文件夹,并会看到是否有任何帮助。
下面是我在下面popd
脚本的完整脚本。 我希望通过您的帮助或input进行分类以供进一步阅读。 注意我对批处理脚本是全新的。 任何对此的帮助真的很感激。 请帮我把那些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%\" /od /b') do echo rd /S /Q "%backupDir%\%%a" pause
这两条不同的线路工作。 保持所有文件可能在backupDir中,同时只删除所选N个最新的nameDir文件夹。
这是从@ JosefZ的评论Windows批处理脚本进行调整,只保留N个最新的文件夹在一个目录中
for /f "skip=2 delims=" %%a in ('dir "%backupDir%\" /B /O:-N /A:D') do echo rd rd /s /q "%backupDir%\%%a"
这也从@ Magoo的答复从这里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"
找到完整的工作批处理脚本在这里Windows批处理脚本备份本地MySQL数据库,只保留N个最新的文件夹备份文件,如果你喜欢。
感谢大家的帮助!