web-dev-qa-db-ja.com

WindowsDirコマンド-サブディレクトリをサイズ順に並べ替える

Dirコマンドを使用して、フォルダのサブディレクトリを最大から最小に表示するにはどうすればよいですか?

dir /O:-Sコマンドを使用してみましたが、ファイルは正常に並べ替えられますが、サブディレクトリの順序が正しくないようです。

理想的には、コマンドはいくつかのレベルに下がることができるはずです。これらのサブフォルダーの一部には、独自のフォルダーがあります。例えば:

D:/
|-- Folder 1
    |-- Subfolder 1
    +-- Subfolder 2
        |--Another folder
+-- Folder 2

フォルダ1(そのサブフォルダ内のすべてのファイルを含む)の合計サイズが10GBで、フォルダ2の合計サイズが15GBであるとすると、合計コンテンツサイズでソートされた順序を出力するにはどうすればよいですか?

つまり.

94932485 Folder 2
6453445  Folder 1

前もって感謝します!

6
Julian Laval

これは、変更された要件に対して機能するようです。alterc:\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"
6
foxidrive

1行のソリューションを使用している場合は、最大999テラバイトをサポートします。

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

また、ファイルとディレクトリの両方が必要な場合は、ボーナスの1行ソリューション

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
5
sparks

編集済み:最大から最小のフォルダを表示する

これが必要かどうかを確認してください。 d:\filesはここのターゲットツリーです。

@echo off
for /f "delims=" %%a in (' dir "d:\files" /ad /b /s ') do call :size "%%a"
sort /r < "dirsize.tmp"
del "dirsize.tmp"
popd
pause
goto :eof

:size
for /f "tokens=3" %%b in ('dir "%~1" 2^>nul ^|find " File(s) "') do (
for /f "tokens=1-4 delims=," %%c in ("%%b") do (
set dirsize=%%c%%d%%e%%f
)
)
set dirsize=                    %dirsize%
set dirsize=%dirsize:~-20%
>>"dirsize.tmp" echo %dirsize% "%~1"

これは私がそれから得たもののサンプルです:

        27982878 "d:\images\+ Funny and Odd pictures"
        22595308 "d:\images\+ Mostly Cats\20120917"
        16723196 "d:\images\+ Mostly Cats\20130215"
        10212204 "d:\images\+ Mostly Cats\20121104"
         9177080 "d:\images\+ Mostly Cats\20130506"
         8992465 "d:\images\+ Mostly Cats\20130814"
         8488502 "d:\images\Misc\Good Ideas"
         6985671 "d:\images\Misc\50 Life Hacks"
         5515548 "d:\images\Misc\Photos That Will Make Your Stomach Drop"
         2541431 "d:\images\Misc\Sci Fi"
         2113294 "d:\images\+ Mostly Cats\20130524"
          384100 "d:\images\Astronomy pics\3D"
               0 "d:\images\Misc"
               0 "d:\images\Astronomy pics"
               0 "d:\images\+ Mostly Cats"
2
foxidrive

これはかなり古い質問ですが、なぜ私のすべての友人がそのようなコマンドがないと答えるのかわかりません。コマンドは次のとおりです。

dir/o:s

回答を編集しているのと同じ理由で、フォルダーでは機能しないというコメントが表示されました。このコマンドはフォルダもサポートします。

このコマンドをローカルマシンの1つのフォルダーで実行すると、以下が出力されます。

d:\Moody>dir /o:s
 Volume in drive D is Data
 Volume Serial Number is CE51-A3E6

 Directory of d:\Moody

28-Jun-2016  11:22 AM    <DIR>          .
28-Jun-2016  11:22 AM    <DIR>          ..
01-Jun-2016  05:37 PM    <DIR>          binding
05-May-2016  06:29 PM    <DIR>          WMQ 8 JARS
27-Jun-2016  06:51 PM    <DIR>          codebase
27-Jun-2016  05:34 PM    <DIR>          docs
21-Jun-2016  11:12 AM    <DIR>          WMQ 7.5 JARS
18-May-2016  12:56 PM    <DIR>          TestValidation
17-Jun-2016  02:35 PM    <DIR>          Java-doc-jms
17-May-2016  04:20 PM    <DIR>          sample-log
20-May-2016  03:28 PM    <DIR>          jms
26-May-2016  12:01 PM    <DIR>          repository
24-Jun-2016  12:09 PM    <DIR>          New folder
05-Apr-2016  04:55 PM    <DIR>          zips
04-May-2016  12:20 PM    <DIR>          PocJms
20-Apr-2016  12:58 PM               901 TestValidation.Zip
22-Jun-2016  04:22 PM             7,739 team.xlsx
13-May-2016  09:19 PM             8,700 sample-log.Zip
04-Jun-2016  03:06 PM            43,410 Sequence diagrams.mdj
28-Jun-2016  11:22 AM            59,392 FW Binding file for DEV QM.msg
02-May-2016  08:04 PM            81,568 PocJms.Zip
21-Mar-2013  01:33 PM            99,926 fscontext-4.2.jar--
22-Jun-2016  02:31 PM           236,631 Java-doc-jms.Zip
05-May-2016  05:19 PM         7,673,675 WMQ 7.5 JARS.Zip
05-May-2016  05:19 PM        12,442,322 WMQ 8 JARS.Zip
              15 File(s)     21,028,409 bytes
              19 Dir(s)  73,162,878,976 bytes free

サイズを表示しているファイルとは別に、私のフォルダも配置されています。製本のサイズを確認すると、そのほぼ18KB;最後のフォルダリポジトリはほぼ1GBです。したがって、フォルダでも機能します。

1
shaILU