E盘有一个文件夹,里面有11262,12513,11147等多个一级子文件夹,其中11262文件夹里面有20130201,20130202,20130203等按日期命名的二级子文件夹,20130201,20130202文件夹里面存的很多小日志文件,很占磁盘,需要压缩。需求:自动压缩备份后删除11262,12513,11147等一级文件夹里面的30天以前的二级子文件夹(就是20130201,20130202,20130203这样日期命名的二级子文件夹),压缩成一个压缩文件就可以了,不用分开单独压缩。压缩文件命名方式以压缩日期命名(如20130301.rar)
我有一个例子,但是生成不了rardir.1st文件,用不了。也不知道怎么修改。求大神帮忙!
@echo offset "rarpath=C:\Program Files\WinRAR\rar.exe" set dayago=30>$.vbs echo dst_date=date()-%dayago% >>$.vbs echo date_str=right(year(dst_date),4) ^& right("0" ^& month(dst_date),2) ^& right("0" ^& day(dst_date),2) >>$.vbs echo wscript.echo date_str for /f %%a in ('cscript /nologo $.vbs') do set "dstdate=%%a" del $.vbs&set "fn=%dstdate%.rar"set dstdate=%dstdate:~0,4%-%dstdate:~4,2%-%dstdate:~6,2% for /d %%a in (*) do ( pushd. cd /d "%%a" for /f "tokens=1,4 delims= " %%i in ('dir /ad/tc^|findstr /b "[0-9].*/[0-9]"^|find /v "."') do ( if %%i leq %dstdate% >>"%~dp0\rardir.1st" echo .\%%a\%%j)popd)::用删除的日期做压缩包文件名,如要用当前日期做文件名,修改::下数3句中%fn%为%date:~0,4%%date:~5,2%%date:~8,2%if exist "rardir.1st" (echo 开始压缩并删除%dayago%天前,%dstdate%及其之前创建的文件夹... >nul "%rarpath%" a -df %fn% @rardir.1st)del rardir.1st 2>nul&echo 处理完成...&pause&exit /b
cd/d "e:\abcr"
2、 这两行 pushd.和cd /d "%%a" 改为一行:
pushd "%%a"
或改为cd "%%a" 则下面有一行的popd改为cd..
3、 for /f "tokens=1,4 delims= " %%i in ('dir /ad/tc^|findstr /b "[0-9].*/[0-9]"^|find /v "."') do (
这一行写得既复杂且findstr用得还有问题,利用文件夹名都是很规则的日期格式,可改为
for /f %%i in ('dir/b/ad/on^|findstr/x 20[0-9][0-9][0-1][0-9][0-3][0-9]') do (
与此相对应,其下一行的%%j 改为%%i
估计你那所有二级文件夹都是日期格式的并无其它文件夹,则还可省去^|findstr/x 20[0-9][0-9][0-1][0-9][0-3][0-9]