2011-07-28 43 views

回答

5

您需要解決兩個問題。

首先,您需要計算文件夾大小。使用類似於此

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

二代碼,你需要認識到舊文件並刪除它們,直到達到大小

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 (
    goto :eof 
) 
) 
goto :eof 

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

把所有拼在一起......

@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 

測試和測試和測試,因爲它不會將文件移動到垃圾箱,但會永久刪除文件。

此外,如果您有要刪除的只讀文件,您可能需要指定/F選項。

在這種情況下,你有文件夾中的子文件夾和你想利用這些存入該帳戶文件夾的大小和要刪除舊文件,事情可能會變得更加複雜。

大小的計算是這樣的

: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」命令的輸出進行排序和按日期排序。我覺得很累。

+0

非常感謝!請原諒我的無知,但我該如何設置文件夾的目錄?如果我保存d批處理文件:\,我想使用的文件夾爲d:\數據? – davivid

+0

我通常安裝在'\ Program Files文件\ bats'夾我所有的蝙蝠,和我在'PATH'環境變量有這個目錄。然後調用它,你只需鍵入蝙蝠文件名,指定目標文件夾和KB所需的大小'KeepFolderSizeBelow d:\數據204800'保持d:\ DATA文件夾下200MB。 –

相關問題