怎样利用批处理自动删除某路径下的过期文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样利用批处理自动删除某路径下的过期文件夹相关的知识,希望对你有一定的参考价值。

我用写了一个批处理脚本,用于自动以当前日期命名创建一个文件夹,并制定一个源文件夹,将该文件夹下的内容拷贝到批处理建立的文件夹里,并利用windows任务计划每隔一周运行一次,这样就会积累大量的文件夹,怎样写一个批处理脚本去删除一月前建立的文件夹?

将一下命令放在您存成批处理文件(比如叫mycleanup.bat),放在您有一大堆文件夹的目录内运行。
for /f "skip=3 delims=" %%i in (\'dir <路径> /b /ad /o-n\') do (
del %%i /s /f /q
rd %%i)
其中的<路径>换成您的路径,但要完整,例如:d:\\mybackup\\
如果您是隔周运行,那么跳过3行应该就是删掉6周以前的文件夹。另外建议您把该批处理的调用加到您原来批处理的开始(call 路径\\mycleanup.bat),每次运行就可以默认清理了。
该批处理如果想运行顺利,有个前提,就是您所有的日期文件夹,都是宽日期格式(yyyy-mm-dd),这样排序才对。
参考技术A @echo off
setlocal enabledelayedexpansion
set today=%date:~0,10%
if %today:~8,1%==0 ( set td=%today:~9,1% ) else (
set td=%today:~8,2% )
if %today:~5,1%==0 ( set tm=%today:~6,1% ) else (
set tm=%today:~5,2% )
pushd %~dp0
set /p confirm=将会删除"%cd%"中所有将近一月前的文件夹,确认继续(Y/N):
if /I %confirm% NEQ Y goto :eof
for /f "tokens=*" %%a in ('dir /ad /b') do (
set n=%%~ta
set n=!n:~0,10!
call :calcdays !n!
if !diffday! gtr 30 (
rd /s /q "%%a"
)
)

goto :eof
:calcdays
set oldday=%1
if %oldday:~8,1%==0 ( set od=%oldday:~9,1% ) else (
set od=%oldday:~8,2% )
if %oldday:~5,1% == 0 ( set om=%oldday:~6,1% ) else (
set om=%oldday:~5,2% )
set /a diffday=%td%-%od%+(%tm%-%om%)*30+(%today:~0,4%-%oldday:~0,4%)*360

将此批处理放在文件夹下,运行后会删除此文件夹中所有一个月前建立的文件夹

批量删除文件夹有很大的风险,而且此批处理未经测试,请考虑清楚后果,慎重使用追问

我这边不需要询问是否删除那段的代码,我改了几次不灵,还有就是最好能删除指定的路径下的文件夹而不需要把这个批处理放在那个路径下,请大神再帮忙改下

追答

去掉了询问,批处理假设是删除"d:\日期文件夹"中的文件夹,可以将其改成其它路径

因风险太大,不再按文件夹修改日期删除文件夹,按照文件夹名称开头的日期删除文件夹;如果文件夹名称开头不是"2012-01-01"这样,已设计为不删除
会存在一些考虑不周的情况,请慎用

@echo off
setlocal enabledelayedexpansion
rem 修改下一行deldir=后引号中的内容,指定要处理的文件夹
set deldir="D:\日期文件夹\"
pushd %deldir%
if not %errorlevel%==0 goto :eof

set today=%date:~0,10%
if %today:~8,1%==0 ( set td=%today:~9,1% ) else (
set td=%today:~8,2% )
if %today:~5,1%==0 ( set tm=%today:~6,1% ) else (
set tm=%today:~5,2% )

for /f "tokens=*" %%a in ('dir /ad /b') do (
echo %%a|findstr "^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" >nul&&set isdate=1||set isdate=0
if !isdate!==1 (
set n=%%a
set n=!n:~0,10!
call :calcdays !n!
if !diffday! gtr 30 (
echo 正在删除文件夹"%%~fa"
rd /s /q "%%a"
)
)
)

goto :eof
:calcdays
set oldday=%1
if %oldday:~8,1%==0 ( set od=%oldday:~9,1% ) else (
set od=%oldday:~8,2% )
if %oldday:~5,1% == 0 ( set om=%oldday:~6,1% ) else (
set om=%oldday:~5,2% )
set /a diffday=%td%-%od%+(%tm%-%om%)*30+(%today:~0,4%-%oldday:~0,4%)*360

参考技术B 比如要删除的文件夹在d:\备份,简单地保留30个最新文件夹,在先前的批处理中加两句
cd/d "d:\备份"
for /f "skip=30" %%i in ('dir/b/ad/o-n')do rd /s/q %%i

windows批处理问题,如何批量删除某几个子文件夹下面,文件名包含特定字符串的所有文件?

windows批处理问题,如何批量删除某几个子文件夹下面,包含特点字符串的所有文件?

简单点的办法就是利用window搜索工具,搜索锚定定到此文件夹,然后输入搜索命的通配符,所谓通配符就是利用好*符号和?符号,*符号代表任意字符串,?号代表一个字符串,举个栗子,*1122AA.dox ,搜索出来都是asdf1122AA.doc ,asdd1122AA.doc,等等的文件,如果是星号只代表文件这个位置的任意字符,你可以根据你所在文件夹文件的通用格式进行合理的组合搭配使用,查询到所有类型的文件或者文件夹,然后选定后删除,就行了哈 参考技术A cd /d "主目录路径"
del /s /q /f "子目录1\*特定字符串*.*" "子目录2\*特定字符串*.*" "子目录3\*特定字符串*.*"
以此类推。
如果主目录中没有任何文件,只有子目录文件夹,那么可以直接这样写
cd /d "主目录路径"
del /s /q /f "*特定字符串1*.*" "*特定字符串2*.*" "*特定字符串2*.*"

以上是关于怎样利用批处理自动删除某路径下的过期文件夹的主要内容,如果未能解决你的问题,请参考以下文章

redis key过期提醒,实现订单自动取消

定时删除指定目录的过期文件(linux)

windows下自动删除过期文件的脚本

python利用os和getopt实现删除指定文件

批处理怎么切换某文件的目录

在Linux中设置计划删除指定时间的文件