web-dev-qa-db-ja.com

バッチファイルを介してすべてのフォルダーをサイズで一覧表示する方法

Txtまたはcsv形式のフォルダーのリストとサイズの簡単なソリューションが必要です。

このコードをフォルダーリストに使用します

dir C:\Temp\*.* /b /a:d > C:\folderList.txt

電流出力

<<folderList.txt>>
folder1
folder2
folder3

希望する出力

<<folderList.txt>>
folder1 # 100 MB
folder2 # 30 MB
folder3 # 110 MB

単純に、各フォルダーのサイズが生成されます。助けて

10
goldenbutter

リスト内の各フォルダーについて、dirコマンドを使用して、フォルダーの下のファイルのサイズを取得します

@echo off
    setlocal disabledelayedexpansion

    set "folder=%~1"
    if not defined folder set "folder=%cd%"

    for /d %%a in ("%folder%\*") do (
        set "size=0"
        for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:"  "') do if "%%~c"=="" set "size=%%~b"
        setlocal enabledelayedexpansion
        echo(%%~nxa # !size!
        endlocal
    )

    endlocal

指定されたフォルダー(バッチファイル、またはパラメーターがない場合は現在のディレクトリにパラメーターとして渡されます)を反復処理します。

その中の各フォルダー(for /d)再帰的なdirコマンドが内側のforコマンド内で実行され、その出力から、最後の要約行(findstrで抽出)が解析され(tokensコマンドのfor)、この下のすべてのファイルの合計サイズサブフォルダーが取得されます。次に、フォルダーの名前(およびフォルダーがある場合は拡張子)とその下の要素のサイズがコンソールにエコーされます。

ファイルを作成する必要がある場合は、バッチの出力をファイルにリダイレクトします

getSizes.cmd "c:\temp" > C:\folderList.txt
18
MC ND

MC NDの優れたコードを使用して、Kb、Mb、Gbなどへの変換を追加しました。それらの形式で変換したい場合に備えて。

@echo off
setlocal disabledelayedexpansion

set "folder=%~1"
  if not defined folder set "folder=%cd%"

    for /d %%a in ("%folder%\*") do (
        set "size=0"
        for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:"  "') do if "%%~c"=="" set "size=%%~b"
        setlocal enabledelayedexpansion
        call :GetUnit !size! unit
        call :ConvertBytes !size! !unit! newsize
        echo(%%~nxa - !newsize! !unit!
        endlocal
    )

endlocal
exit /b

:ConvertBytes bytes unit ret
setlocal
if "%~2" EQU "KB" set val=/1024
if "%~2" EQU "MB" set val=/1024/1024
if "%~2" EQU "GB" set val=/1024/1024/1024
if "%~2" EQU "TB" set val=/1024/1024/1024/1024
> %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),1)
for /f "delims=" %%a in ( 
  'cscript //nologo %temp%\tmp.vbs' 
) do endlocal & set %~3=%%a
del %temp%\tmp.vbs
exit /b


:GetUnit bytes return
set byt=00000000000%1X
set TB=000000000001099511627776X
if %1 LEQ 1024 set "unit=Bytes"
if %1 GTR 1024   set "unit=KB"
if %1 GTR 1048576  set "unit=MB"
if %1 GTR 1073741824  set "unit=GB"
if %byt:~-14% GTR %TB:~-14% set "unit=TB"
endlocal & set %~2=%unit%
exit /b
11
Matt Williamson

windows 7以降を使用している場合は、powershellを使用してコマンドを入力してください

ls- r >> log.txt

現在のディレクトリ内のすべてのファイルと、ログファイルのバイト単位のファイルサイズが一覧表示されます。

1
Ketan Verma

My JREN.BATユーティリティ を使用して、サイズのあるフォルダーのリストを取得できます。これは、XP以降、任意のWindowsマシン上でネイティブに実行されるハイブリッドJScript /バッチスクリプトです。

JRENはMB(またはその他の単位)に便利に変換されません-サイズをバイト単位で単にリストします。しかし、リストを取得することは確かに便利です(比較的高速です)。

jren "$" "' # '+size()" /d /j /list /p "d:\temp" >"C:\folderList.txt"

フォルダーサイズを最初に配置し、最大のフォルダーを超える固定幅にスペースを埋めてからフォルダー名を配置することを検討してください。私はこの形式を読むのがずっと簡単だと思っていますが、それでも構文解析は簡単です:

jren "^" "size('               ')+'  '" /d /j /list /p "d:\temp" >"C:\folderList.txt"

出力は次のようになります

           1852  SomeFolderName
        1616869  Another folder name
         137764  yetAnother

JRENはバッチファイルであるため、コマンドを別のバッチスクリプト内に配置する場合は、CALL JRENを使用する必要があります。

1
dbenham

try sed Windowsの場合:

dir /-c /a /w /s|sed -nr "/:$/q;/:/h;/^\s+[0-9]/{s/.*[^0-9]([0-9]+.*)/\1/;H;g;s/\n/ /p}"
0
Endoro

@Matt Williamsonsコードを取得し、各行を実行ディレクトリfolderSizes.csvの.csvファイルにエクスポートしました。完全なバイトサイズを列として提供するため、Excel(またはその他)で簡単に並べ替えることができます。

@echo off
echo Getting folder sizes for you...storing to folderSizes.csv
setlocal disabledelayedexpansion
if EXIST folderSizes.csv del folderSizes.csv
echo Folder,Bytes Size,Short Size > folderSizes.csv

set "folder=%~1"
  if not defined folder set "folder=%cd%"

    for /d %%a in ("%folder%\*") do (
        set "size=0"
        for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:"  "') do if "%%~c"=="" set "size=%%~b"
        setlocal enabledelayedexpansion
        call :GetUnit !size! unit
        call :ConvertBytes !size! !unit! newsize
        echo(%%~nxa,!size!,!newsize!!unit! >> folderSizes.csv
        endlocal 
    )

endlocal
exit /b

:ConvertBytes bytes unit ret
setlocal
if "%~2" EQU "KB" set val=/1024
if "%~2" EQU "MB" set val=/1024/1024
if "%~2" EQU "GB" set val=/1024/1024/1024
if "%~2" EQU "TB" set val=/1024/1024/1024/1024
> %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),1)
for /f "delims=" %%a in ( 
  'cscript //nologo %temp%\tmp.vbs' 
) do endlocal & set %~3=%%a
del %temp%\tmp.vbs
exit /b


:GetUnit bytes return
set byt=00000000000%1X
set TB=000000000001099511627776X
if %1 LEQ 1024 set "unit=Bytes"
if %1 GTR 1024   set "unit=KB"
if %1 GTR 1048576  set "unit=MB"
if %1 GTR 1073741824  set "unit=GB"
if %byt:~-14% GTR %TB:~-14% set "unit=TB"
endlocal & set %~2=%unit%
exit /b
0
Leland