Windows定时删除指定路径下N天前的文件以及文件夹(脚本之家修正版)
投稿:mdxy-dxy
问:如何批处理删除文件夹及其所有子文件夹下N天前所有文件
答:下面的分析非常好,一旦文件夹里面做过任何操作,文件夹都是当前日期,所以就无法删除
当文件夹里面的某一个文件当前时间被修改过,这个文件夹的修改时间就会变成当前时间.
以删除30天以前的文件夹为例.如果一个文件夹的最后时间都是30天以前.
那么在30天以内该文件夹下的所有文件都没有被修改过.
而一个文件夹如果不在30天以前,那么也可能文件夹下的某些文件是在30天以前的.
根据这个思路.先删除30天以前的文件夹.
再删除30天以内文件夹下所有30天以前的文件.
那么就结果就如下:
forfiles -D -30 /M * /C "cmd /c rd @file /s /q"
forfiles -D -30 /S /M * /C "cmd /c del @path /s /q"
两行批处理即可搞定,具体的完整代码可以参考下面的内容
forfiles 判断文件夹
forfiles 是 Windows 命令提示符(cmd)中的一个命令,用于基于一组文件(包括文件夹)执行命令。
要使用 forfiles 来判断是否存在特定的文件夹,可以使用以下命令:
forfiles /p "C:\path" /s /d -1 /c "cmd /c if @isdir==TRUE echo Folder found: @path"
解释:
/p 参数后面跟着要搜索的路径。
/s 参数表示搜索子目录。
/d -1 表示当前日期之前的日期,因为如果找到的是文件夹,它的日期将与当前日期匹配或早于当前日期。
/c 参数后面是要执行的命令,这里是 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,点击执行即可
脚本文件存放随意,因为里面的路径是绝对路径
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脚本实现定时删除指定文件夹下的文件和文件夹
业务需求:jenkisn脚本执行日志需要定时清理,否则会影响执行结果,因此需要使用bat脚本,实现每隔一小时,定时删除文件路径为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
升级:如果要求根据当前日期(eg:2020/12/25)创建和清除当天文件?
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参数表示:强制删除只读文件
/s参数表示:从所有子目录删除指定文件
/q参数表示:删除全局通配符时,不提示删除确认
cd 进入文件夹目录
rd 删除文件夹
cd …/返回上级目录
md 创建文件夹
6.批处理定时删除文件夹及文件
批处理脚本可以用来定期删除指定的文件夹及其中的所有文件。以下是一个简单的批处理脚本示例,它会删除指定路径下的文件夹及其所有内容:
@echo off setlocal :: 设置要删除的文件夹路径 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
文件,并双击运行或通过任务计划程序设置定时执行,以实现定时删除文件夹的目的。
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 )
这段大家可以参考研究一下