Windows定時刪除指定路徑下N天前的文件以及文件夾(腳本之家修正版)
問:如何批處理刪除文件夾及其所有子文件夾下N天前所有文件
答:下面的分析非常好,一旦文件夾里面做過任何操作,文件夾都是當前日期,所以就無法刪除
當文件夾里面的某一個文件當前時間被修改過,這個文件夾的修改時間就會變成當前時間.
以刪除30天以前的文件夾為例.如果一個文件夾的最后時間都是30天以前.
那么在30天以內(nèi)該文件夾下的所有文件都沒有被修改過.
而一個文件夾如果不在30天以前,那么也可能文件夾下的某些文件是在30天以前的.
根據(jù)這個思路.先刪除30天以前的文件夾.
再刪除30天以內(nèi)文件夾下所有30天以前的文件.
那么就結(jié)果就如下:
forfiles -D -30 /M * /C "cmd /c rd @file /s /q"
forfiles -D -30 /S /M * /C "cmd /c del @path /s /q"
兩行批處理即可搞定,具體的完整代碼可以參考下面的內(nèi)容
forfiles 判斷文件夾
forfiles 是 Windows 命令提示符(cmd)中的一個命令,用于基于一組文件(包括文件夾)執(zhí)行命令。
要使用 forfiles 來判斷是否存在特定的文件夾,可以使用以下命令:
forfiles /p "C:\path" /s /d -1 /c "cmd /c if @isdir==TRUE echo Folder found: @path"
解釋:
/p 參數(shù)后面跟著要搜索的路徑。
/s 參數(shù)表示搜索子目錄。
/d -1 表示當前日期之前的日期,因為如果找到的是文件夾,它的日期將與當前日期匹配或早于當前日期。
/c 參數(shù)后面是要執(zhí)行的命令,這里是 cmd /c if @isdir==TRUE echo Folder found: @path,其中 @isdir 是一個變量,如果是文件夾則為 TRUE,如果是文件則為 FALSE。
如果需要判斷特定名稱的文件夾,可以修改 forfiles 命令以匹配特定的文件夾名稱:
forfiles /p "C:\path" /s /m yourfoldername /c "cmd /c if @isdir==TRUE echo Folder found: @path"
在這個例子中,yourfoldername 是你要查找的文件夾名稱。如果找到了匹配的文件夾,將會在命令提示符窗口中顯示文件夾的路徑。
將下面代碼復制到自建的.txt文件里,然后保存再更改后輟名為.bat,點擊執(zhí)行即可
腳本文件存放隨意,因為里面的路徑是絕對路徑
1. 刪除指定路徑下15天前的所有文件
@echo off set SrcDir=E:\WORK\Git set DaysAgo=15 forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
這里的 /m . 是指路徑下的所有文件,可以指定文件后輟如 *.txt
2.刪除指定路徑下5天前的所有文件夾
@echo off set SrcDir=E:\WORK\Git set DaysAgo=5 forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c rd /s /q @path"
也就是把 【del /f /q /a】換成【rd /s /q】即可
3.刪除指定路徑下5天前的所有文件,以及文件夾
@echo off set SrcDir=E:\WORK\Git set DaysAgo=5 forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c rd /s /q @path" forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
4.刪除當前目錄及子目錄下的空文件夾
@echo off setlocal REM 刪除當前目錄下的空文件夾 for /f "delims=" %%d in ('dir /ad /s /b ^| sort /r') do ( rmdir "%%d" 2>nul ) REM 輸出刪除操作完成的提示信息 echo 刪除空文件夾操作完成。 endlocal
雙擊運行批處理,即可刪除當前目錄及子目錄下的空文件夾完成。
5.windows下bat腳本實現(xiàn)定時刪除指定文件夾下的文件和文件夾
業(yè)務需求:jenkisn腳本執(zhí)行日志需要定時清理,否則會影響執(zhí)行結(jié)果,因此需要使用bat腳本,實現(xiàn)每隔一小時,定時刪除文件路徑為E:\ABC\DEF下的所有文件和文件夾。
1、首先新建一個del.txt文本
del /f /s /q E:\ABC\DEF\*.* cd E:\ABC\DEF rd /s /q E:\ABC\DEF cd .. md E:\ABC\DEF
升級:如果要求根據(jù)當前日期(eg:2020/12/25)創(chuàng)建和清除當天文件?
del /f /s /q E:\ABC\%date:~0,4%\%date:~5,2%\%date:~8,2%\*.* cd E:\ABC\%date:~0,4%\%date:~5,2%\%date:~8,2% rd /s /q E:\ABC\%date:~0,4%\%date:~5,2%\%date:~8,2% cd .. md E:\ABC\%date:~0,4%\%date:~5,2%\%date:~8,2%
2、保存,右擊文件選擇【重命名】,將后綴改成.bat文件
說明:這里的del命令只能刪除文件,不能刪文件夾。
刪除文件夾使用rd命令。
del 刪除文件
/f參數(shù)表示:強制刪除只讀文件
/s參數(shù)表示:從所有子目錄刪除指定文件
/q參數(shù)表示:刪除全局通配符時,不提示刪除確認
cd 進入文件夾目錄
rd 刪除文件夾
cd …/返回上級目錄
md 創(chuàng)建文件夾
6.批處理定時刪除文件夾及文件
批處理腳本可以用來定期刪除指定的文件夾及其中的所有文件。以下是一個簡單的批處理腳本示例,它會刪除指定路徑下的文件夾及其所有內(nèi)容:
@echo off setlocal :: 設(shè)置要刪除的文件夾路徑 set "TARGET_DIR=C:\path\to\your\directory" :: 確認文件夾是否存在 if exist "%TARGET_DIR%" ( rmdir /s /q "%TARGET_DIR%" if not exist "%TARGET_DIR%" ( echo 文件夾已被刪除: %TARGET_DIR% ) ) else ( echo 指定的文件夾不存在: %TARGET_DIR% ) endlocal
請將 C:\path\to\your\directory
替換為你想要刪除的文件夾的實際路徑。
將以上代碼保存為 .bat
文件,并雙擊運行或通過任務計劃程序設(shè)置定時執(zhí)行,以實現(xiàn)定時刪除文件夾的目的。
7.cmd 刪除制定文件架下制定日期之間的文件
@echo off set tt=7&set ph=D:\SHLongYang_DBBK for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100 if %p3% gtr %TT% goto ppp :nxt set/a p2-=1 if %p2% equ 0 set/a p1-=1&&set p2=12 set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2 for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i if %p3% leq %tt% goto nxt :ppp set/a p3=%p3%-%tt% setlocal enabledelayedexpansion for %%i in (p2 p3 t1 t2) do if !%%i! lss 10 set %%i=0!%%i! for /f "tokens=*" %%i in ('dir /b /s "%ph%"') do ( set "ta=%%~ti" if exist "%%i\" ( if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" rd /s /q "%%i" 2>nul ) else if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" del /a/q/f "%%i" >nul 2>nul )
這段大家可以參考研究一下
相關(guān)文章
windows使用批處理發(fā)布web到tomcat并啟動tomcat腳本分享
這篇文章主要介紹了windows使用批處理發(fā)布web到tomcat并啟動tomcat的腳本,需要的朋友可以參考下2014-03-03批處理中屏蔽錯誤信息 nul 2>nul 的用法 (cmd>nul空
批處理中屏蔽錯誤信息這個 >nul 2>nul 可以屏蔽一切屏幕的輸出可以這樣理解2012-06-06