簡體   English   中英

Windows批處理腳本僅將N個最新的文件夾保留在目錄中

[英]Windows Batch Script to only keep the N latest FOLDERS in a directory

我有一個目錄,其中將具有當前日期的MySQL數據庫備份到該目錄中。

現在,在30天或60天之后,我只想將n個最新文件夾保留在該備份目錄中,並刪除其余所有文件夾,每個文件夾中都有gzip壓縮的dbs。

為了備份MySQL數據庫,我使用adityasatrio的批處理腳本,並使用此答案對具有當前日期的文件夾進行了排序。

但是,就本例而言,僅保留最新的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個文件夾以外的所有文件夾,因此基本上刪除帶有gzip壓縮的.sql文件的舊文件夾。

這些問題有所幫助,但我仍然無法正確執行。

刪除除X最近的所有文件夾

如何從目錄中刪除舊文件,同時將最新文件保留在Windows上 (文件而不是文件夾)

批處理文件以刪除超過N天的文件(同樣,文件不是文件夾)

https://serverfault.com/questions/49614/delete-files-older-than-x-days (出於很好的考慮,請再次將文件而不是文件夾..)

此注釋會刪除除X最近的所有文件夾以外的所有文件夾 ,這與我嘗試執行的操作最接近,但這也會刪除backupDir中可能存在的所有文件。

**編輯1:**剛發現刪除Windows中除2個最新文件夾以外的所有文件夾 ,將查看是否有任何幫助。

下面是我在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

這兩行不同。 僅刪除所選的N個最新nameDir文件夾時,backupDir中可能會保留所有文件。

通過@JosefZ的注釋Windows Batch腳本進行了調整, 以僅將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個最新的文件夾和備份文件(如果您願意)。

謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM