Batch file 保留最小目录并删除所有其他目录的批处理文件命令

Batch file 保留最小目录并删除所有其他目录的批处理文件命令,batch-file,size,directory,Batch File,Size,Directory,我的问题有点复杂。让我详细说明: 我现在有一个批处理文件,它将创建4个文件夹——它们是: 1 2 3 4 这4个文件夹中的每个文件夹都有2个文件。我想做的是创建一个批处理文件,该文件将保留这4个文件夹中最小的文件夹,并删除其他文件夹。因此,如果文件夹大小如下所示: 1 = 300,000 b 2 = 325,000 b 3 = 250,000 b 4 = 350,000 b 然后只保留文件夹3,删除文件夹1、2和4 这可以通过批处理文件完成吗?任何帮助都将不胜感激 谢谢。将此批处理文件放在包

我的问题有点复杂。让我详细说明:

我现在有一个批处理文件,它将创建4个文件夹——它们是:

1
2
3
4
这4个文件夹中的每个文件夹都有2个文件。我想做的是创建一个批处理文件,该文件将保留这4个文件夹中最小的文件夹,并删除其他文件夹。因此,如果文件夹大小如下所示:

1 = 300,000 b
2 = 325,000 b
3 = 250,000 b
4 = 350,000 b
然后只保留文件夹3,删除文件夹1、2和4

这可以通过批处理文件完成吗?任何帮助都将不胜感激


谢谢。

将此批处理文件放在包含4个数据文件夹的文件夹中,然后运行它:

@echo off
setlocal EnableDelayedExpansion

rem Get size of all folders
set smallestSize=9999999999
for /D %%a in (*) do (
   set size=0
   for %%b in (%%a\*.*) do set /A size+=%%~Zb
   if !size! lss !smallestSize! (
      set smallestSize=!size!
      set smallestName=%%a
   )
)

echo Folder to keep: "%smallestName%"
pause

rem Delete all folders, excepting the smallest one
for /D %%a in (*) do (
   if "%%a" neq "%smallestName%" rd /S /Q "%%a"
)
@echo关闭
setlocal enableextensions enabledelayedexpansion
rem配置从何处开始
设置“根=%cd%”
rem初始化所需的变量
设置“minSize=9999999999999”
设置“minFolder=”
设置“大小=”
设置“文件夹=”
对于(“%root%”)中的%%a,请设置“驱动器=%%~da”
rem检索完整列表,并从中仅获取
rem包含文件夹名称和文件计数/大小
对于/f“skip=2 delims=”%%z in('
dir/-c/s/a-d“%root%\*”^ findstr/r/c:^[]*[0-9]”/c::\.*
""做"(
rem确定当前行是文件夹名称还是文件夹统计信息。
rem如果我们已经读取了文件夹名称,下一条记录应该是大小
rem否则,我们将为dir命令提供文件夹名称或最终统计信息
如果已定义文件夹(
rem将大小和格式读取为零前缀字符串,以避免2^31限制
批处理文件算法中的rem。所有大小测试都将是字符串测试。
对于(“%z”)中的/f“令牌=3”%%a,请设置“大小=00000000000000%%a”&设置“大小=!大小:~-20!”
)其他(
rem读取文件夹名称并重置此文件夹的大小。因为使用了冒号
rem将文件夹名称与行中的其他数据(驱动器)分离
删除rem字母和冒号。追加最初检索到的字母和冒号。
对于/f“tokens=2 delims=:”(“%z”)中的%%a,请设置“文件夹=%drive%%%a”
设置“大小=”
)
rem当大小可用时,也会检索文件夹。
rem由于我们有所有需要的信息,请检查当前文件夹大小
rem小于上一个最小文件夹并删除上一个或下一个文件夹
rem当前的一个取决于它的大小
如果定义了大小(
如果“!size!”lss“!minSize!”(
rem旧文件夹较大,请将其删除并记住当前文件夹信息
如果定义了minFolder echo rd/s/q“!minFolder!”
设置“minSize=!size!”
设置“minFolder=!folder!”
)否则(
rem当前文件夹较大,请将其删除
echo rd/s/q“!文件夹!”
)
在任何情况下,当前文件夹都已被处理。初始化变量
设置“大小=”
设置“文件夹=”
)
)
有很多代码,但我试图只执行一个
dir
命令来检索所有需要的信息


根据需要更改
root
变量。此外,所有的
rd
命令只回显到控制台。如果输出正确,请删除作为
rd
操作前缀的
echo
命令。

我测试了该批处理文件,它正确识别了最小的文件夹,但在暂停点按ENTER键后,三个较大的文件夹没有被删除。