如何修改此批处理脚本以删除最旧的子文件夹而不是目录中的文件?

时间:2015-03-19 20:55:18

标签: windows batch-file file-management

通过运行limitdirsize.bat c:\example 4000000C:\example限制为4GB,可以调用以下批处理文件。处理仅包含文件的文件夹时,它可以正常工作。

运行时,它会删除目录中最旧的文件,直到文件夹的大小为4GB。

@echo off
setlocal enabledelayedexpansion
set /a targetsize=%2
call :foldersize %1
for /F "tokens=*" %%F in ('dir /A-D /OD /B %1\*.*') do (
  if !sz! geq !targetsize! (
    call :filesize %1\%%F
    del %1\%%F
    set /a sz = !sz! - !kb!
  ) else (
    echo Done... %1 size is now !sz! KB
    goto :eof
  )
) 
echo Not completely done... %1 size is still !sz! KB 
goto :eof  

:filesize
set /a kb = %~z1 / 1024
goto :eof

:foldersize
set sz=0
for %%F in (%1\*.*) do (
  set /a kb = %%~zF / 1024
  set /a sz = !sz! + !kb!  
)
goto :eof

我想限制只包含子目录的目录的大小。

用于确定子目录大小的批处理脚本将是

:foldersizerecurse
set sz=0
for /F %%F in ('dir /OD /B *.*') do (
  set /a kb = %%~zF / 1024
  set /a sz = !sz! + !kb!  
  echo %%F %%~zF !kb! !sz!
)
goto :eof

根据此代码的作者:

  

你需要管道' dir / S'命令输出按日期排序和排序

为清楚起见::foldersize计算正在清理的文件夹的大小,第4行与该函数之间的所有内容用于识别旧文件并删除它们,直到达到所需的目录大小。

0 个答案:

没有答案