想要使用bat来删除某指定文件夹内的,指定天数以前的文件。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想要使用bat来删除某指定文件夹内的,指定天数以前的文件。相关的知识,希望对你有一定的参考价值。

想要使用bat来删除某指定文件夹内的,指定天数以前的文件。
这个指定天数以前的文件是以创建天数为准的。

如果每天一个文件的话,删除30天前的文件为例,可以用下面的方法
@echo off
pushd d:\指定文件夹
set n=30

for /f "skip=%n% tokens=*" %%i in ('dir/b/o-d') do del "%%i"

如果每天文件多于一个的话,需借助vbs来实现。
用bat本身判断日期的有效性有点复杂。
参考技术A BAT 是指批处理吗

如果是的话那 delete 命令没有一个参数可以用来判断文件创建时间的,所以不能实现
参考技术B 百度经验

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + VBS

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算
::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式,
::处理完毕之后再把日期格式恢复成原来的状态。
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
for /f "skip=2 delims=" %%a in (‘reg query "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate‘) do (
    set "RegDateOld=%%a"
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in (‘cscript /nologo "%temp%/DstDate.vbs"‘) do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
reg add "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
pause

  

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算
::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式,
::处理完毕之后再把日期格式恢复成原来的状态。

rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
for /f "skip=2 delims=" %%a in (‘reg query "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate‘) do (
    set "RegDateOld=%%a"
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in (‘cscript /nologo "%temp%/DstDate.vbs"‘) do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
reg add "HKEY_CURRENT_USER/Control Panel/International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
pause

 

 

 

技术分享图片 

以上是关于想要使用bat来删除某指定文件夹内的,指定天数以前的文件。的主要内容,如果未能解决你的问题,请参考以下文章

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + VBS

windows的bat脚本

bat怎样删除指定文件夹内的指定后缀文件?

bat批处理删除指定文件夹内的所有文件

bat删除当前目录指定后缀的文件夹?

使用.Bat删除在Windows 10上超过特定天数的文件[复制]