Windows Dir命令 - 按大小排序子目录

Jul*_*val 6 windows command-line dir windows-8

如何使用dir命令从最大到最小显示文件夹的子目录?

我尝试过使用dir /O:-S命令,虽然它对文件进行了很好的排序,但它似乎没有订购子目录.

理想情况下,命令应该能够达到几个级别; 其中一些子文件夹有自己的文件夹.例如:

D:/
|-- Folder 1
    |-- Subfolder 1
    +-- Subfolder 2
        |--Another folder
+-- Folder 2
Run Code Online (Sandbox Code Playgroud)

假设文件夹1(包括其子文件夹中的所有文件)的总大小为10GB,而文件夹2的总大小为15GB,我将如何输出按总内容大小排序的订单?

94932485 Folder 2
6453445  Folder 1
Run Code Online (Sandbox Code Playgroud)

提前致谢!

fox*_*ive 6

这似乎适用于更改的要求:更改c:\folder为要查询的文件夹级别.

@echo off
pushd "c:\folder"
for /f "delims=" %%a in (' dir /ad /b ') do call :size "%%~fa"
sort /r < "%temp%\dirsize.tmp"
del "%temp%\dirsize.tmp"
popd
pause
goto :eof

:size
for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s) "') do set "n=%%b"
set dirsize=%n%
REM set dirsize=%dirsize:,=%
set dirsize=                 %dirsize%
set dirsize=%dirsize:~-18%
>>"%temp%\dirsize.tmp" echo %dirsize% "%~1"
Run Code Online (Sandbox Code Playgroud)


spa*_*rks 5

如果您使用的是单行解决方案,那么它最多支持999 TB:

cmd /v /c "set zeropad=000,000,000,000,000,&for /f "delims=" %a in ('dir /ad /b') do @set bytes=!zeropad!000&(for /f "tokens=3" %b in ('dir /s "%a" 2^>NUL ^| find "File(s)"') do @set bytes=%b)& @for /f "tokens=1* delims=," %c in ('echo !bytes!') do @(set bytes=%c&@set bytes=000!bytes!&@set bytes=!bytes:~-3!& @set bytes=!zeropad!!bytes!&if "%d" NEQ "" set bytes=!bytes!,%d) & @echo !bytes:~-23! %a" | sort /R

如果您同时需要文件和目录,还有一个额外的单线解决方案

cmd /v /c "set zeropad=000,000,000,000,000,&for /f "tokens=4* delims= " %a in ('dir ^| find "/" ^| findstr /E /V /R "DIR^>[ ][ ]*\.\.$ DIR^>[ ][ ]*\.$"') do @set bytes=!zeropad!000&(if "%a" EQU "^<DIR^>" (for /f "tokens=3" %c in ('dir /s "%b" 2^>NUL ^| find "File(s)"') do @set bytes=%c)) & (if "%a" NEQ "^<DIR^>" (set bytes=%a)) & (for /f "tokens=1* delims=," %d in ('echo !bytes!') do @set bytes=%d&@set bytes=000!bytes!&@set bytes=!bytes:~-3!& @set bytes=!zeropad!!bytes!&if "%e" NEQ "" set bytes=!bytes!,%e)& echo !bytes:~-23! %b" | sort /R
Run Code Online (Sandbox Code Playgroud)