Windows定時(shí)刪除指定路徑下N天前的文件以及文件夾(腳本之家修正版)
問:如何批處理刪除文件夾及其所有子文件夾下N天前所有文件
答:下面的分析非常好,一旦文件夾里面做過任何操作,文件夾都是當(dāng)前日期,所以就無法刪除
當(dāng)文件夾里面的某一個(gè)文件當(dāng)前時(shí)間被修改過,這個(gè)文件夾的修改時(shí)間就會(huì)變成當(dāng)前時(shí)間.
以刪除30天以前的文件夾為例.如果一個(gè)文件夾的最后時(shí)間都是30天以前.
那么在30天以內(nèi)該文件夾下的所有文件都沒有被修改過.
而一個(gè)文件夾如果不在30天以前,那么也可能文件夾下的某些文件是在30天以前的.
根據(jù)這個(gè)思路.先刪除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)中的一個(gè)命令,用于基于一組文件(包括文件夾)執(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 表示當(dāng)前日期之前的日期,因?yàn)槿绻业降氖俏募A,它的日期將與當(dāng)前日期匹配或早于當(dāng)前日期。
/c 參數(shù)后面是要執(zhí)行的命令,這里是 cmd /c if @isdir==TRUE echo Folder found: @path,其中 @isdir 是一個(gè)變量,如果是文件夾則為 TRUE,如果是文件則為 FALSE。
如果需要判斷特定名稱的文件夾,可以修改 forfiles 命令以匹配特定的文件夾名稱:
forfiles /p "C:\path" /s /m yourfoldername /c "cmd /c if @isdir==TRUE echo Folder found: @path"
在這個(gè)例子中,yourfoldername 是你要查找的文件夾名稱。如果找到了匹配的文件夾,將會(huì)在命令提示符窗口中顯示文件夾的路徑。
將下面代碼復(fù)制到自建的.txt文件里,然后保存再更改后輟名為.bat,點(diǎn)擊執(zhí)行即可
腳本文件存放隨意,因?yàn)槔锩娴穆窂绞墙^對路徑
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.刪除當(dāng)前目錄及子目錄下的空文件夾
@echo off
setlocal
REM 刪除當(dāng)前目錄下的空文件夾
for /f "delims=" %%d in ('dir /ad /s /b ^| sort /r') do (
rmdir "%%d" 2>nul
)
REM 輸出刪除操作完成的提示信息
echo 刪除空文件夾操作完成。
endlocal雙擊運(yùn)行批處理,即可刪除當(dāng)前目錄及子目錄下的空文件夾完成。
5.windows下bat腳本實(shí)現(xiàn)定時(shí)刪除指定文件夾下的文件和文件夾
業(yè)務(wù)需求:jenkisn腳本執(zhí)行日志需要定時(shí)清理,否則會(huì)影響執(zhí)行結(jié)果,因此需要使用bat腳本,實(shí)現(xiàn)每隔一小時(shí),定時(shí)刪除文件路徑為E:\ABC\DEF下的所有文件和文件夾。
1、首先新建一個(gè)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í):如果要求根據(jù)當(dāng)前日期(eg:2020/12/25)創(chuàng)建和清除當(dā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ù)表示:強(qiáng)制刪除只讀文件
/s參數(shù)表示:從所有子目錄刪除指定文件
/q參數(shù)表示:刪除全局通配符時(shí),不提示刪除確認(rèn)
cd 進(jìn)入文件夾目錄
rd 刪除文件夾
cd …/返回上級(jí)目錄
md 創(chuàng)建文件夾
6.批處理定時(shí)刪除文件夾及文件
批處理腳本可以用來定期刪除指定的文件夾及其中的所有文件。以下是一個(gè)簡單的批處理腳本示例,它會(huì)刪除指定路徑下的文件夾及其所有內(nèi)容:
@echo off setlocal :: 設(shè)置要?jiǎng)h除的文件夾路徑 set "TARGET_DIR=C:\path\to\your\directory" :: 確認(rèn)文件夾是否存在 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 替換為你想要?jiǎng)h除的文件夾的實(shí)際路徑。
將以上代碼保存為 .bat 文件,并雙擊運(yùn)行或通過任務(wù)計(jì)劃程序設(shè)置定時(shí)執(zhí)行,以實(shí)現(xiàn)定時(shí)刪除文件夾的目的。
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
)這段大家可以參考研究一下
- 用PowerShell刪除N天前或指定日期(前后)創(chuàng)建(或修改)的文件
- 用批處理刪除N天前或指定日期時(shí)間(前后)創(chuàng)建(或修改)的文件
- linux如何定時(shí)刪除N天前的文件(文件夾)
- shell腳本實(shí)現(xiàn)定時(shí)刪除文件或文件夾
- Java實(shí)現(xiàn)文件夾中內(nèi)容定時(shí)刪除
- 定時(shí)刪除一個(gè)文件夾內(nèi)的所有子文件夾和文件的方法
- php定時(shí)刪除文件夾下文件(清理緩存文件)
- cmd forfiles 從文件夾或樹中選擇要進(jìn)行批處理的文件(方便批量刪除n天前的文件)
- cmd rd命令 刪除文件夾
相關(guān)文章
windows使用批處理發(fā)布web到tomcat并啟動(dòng)tomcat腳本分享
這篇文章主要介紹了windows使用批處理發(fā)布web到tomcat并啟動(dòng)tomcat的腳本,需要的朋友可以參考下2014-03-03
批處理bat系統(tǒng)管理之任務(wù)計(jì)劃篇
本文主要介紹使用?at?和?schtasks?兩個(gè)命令實(shí)現(xiàn)常見任務(wù)計(jì)劃的增刪查改等操作,需要的朋友可以參考下2022-10-10
批處理中屏蔽錯(cuò)誤信息 nul 2>nul 的用法 (cmd>nul空
批處理中屏蔽錯(cuò)誤信息這個(gè) >nul 2>nul 可以屏蔽一切屏幕的輸出可以這樣理解2012-06-06

