如果超过10个,将删除最新的文件夹的batch file

我想创build一个batch file(.bat),如果文件超过10个,可以删除文件夹中最新的文件夹。 如果这是目录树:

\My Folders\ ... \Old Videos\ (Created 2 Hours Ago) ... \Files\ (Created Last Month) ... \Pics\ (Created Last Week) ... \Powerpoints\ (Created Yesterday) ... \Videos\ (Created Several Days Ago) ... \Old Pics\ (Created Yesterday) ... \Movies\ (Created Yesterday) ... \Games\ (Created Yesterday) ... \Old Files\ (Created Last Month) ... \Downloads\ (Created Two Weeks Ago) ... \New Folder\ (Created Just Now) 

所以这个batch file在运行的时候,会删除新build文件夹(在底部),因为文件夹中有超过10个文件( 不包括子文件夹 ),而且是最新的。 如果目录树中有12个文件夹(再次,减去子文件夹),则batch file将删除最新的2个文件夹,依此类推。

有没有办法在Win10中做到这一点? 我已经搞混了一点,但一直没能做到。

Solutions Collecting From Web of "如果超过10个,将删除最新的文件夹的batch file"

dir有很多有用的开关:
/ad只显示文件夹(无文件)
/od按日期排序(最早的第一个)
/tc采取“创建”日期时间(默认:“最后更改”)
/b来显示名称。

放一个for循环,跳过前10行,你就完成了:

 @echo off cd "My Folders" for /f "skip=10 delims=" %%a in ('dir /ad /od /tc /b') do ECHO rd /s /q "%%a" 

如果输出是你想要的,则删除ECHO

以下批处理脚本将完成您所要求的操作:

用法: batch.bat "path\folder with spaces" 11

如果你可以,你可以删除rd命令前面的echo 。 您也可以扩展到首先打印列表,然后询问用户确认删除它们。
此批处理使用带/O:D选项的dir命令对日期进行排序(最早的第一个), /A:D选项仅显示目录,使用创建日期的/ TC选项和仅获取名称的/B

dir命令使用上次写入的时间作为默认值,如果要更改使用/ T开关(在此描述,请参阅technet ):

/t[[:]<TimeField>]

指定要显示或用于排序的时间字段。 以下列表描述了可用于TimeField的每个值:

c创作

最后一次访问

w最后写的

 @echo off setlocal enabledelayedexpansion rem Check if 2 arguments are passed set INVARGS=0 if [%1] == [] set INVARGS=1 if [%2] == [] set INVARGS=1 if %INVARGS% == 1 ( echo Usage: %0 ^<folder^> ^<count^> goto :EOF ) set "folder=%~1" set "count=%~2" if not exist "%folder%" ( echo The directory does not exists: echo "%folder%" echo The program will exit. goto :EOF ) pushd "%folder%" set idx=1 rem dir command with date sort just directories for /f "delims=" %%F in ('dir /O:D /A:D /TC /B') do ( if !idx! GEQ %count% ( echo rd /s /q "%%F" ) set /a idx=!idx!+1 ) popd