0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PowerShell】再帰を使わずに入れ子のフォルダのサイズを取得する

Last updated at Posted at 2023-02-19

はじめに

フォルダのサイズを取得するという記事では、フォルダが入れ子になっている場合、C#だと再帰処理を使わないとフォルダのサイズ(合計)を取得できないと書かれていました。

確かPowerShellだとユーザー自身が再帰を使わなくても入れ子のフォルダを取得できたはず...と思い、調べてみた結果を記事としてまとめてみました。

Get-ChildItemの活用

  • Get-ChildItemというコマンドレットのパラメーターとして-Recurseを付けると、指定したフォルダの中を再帰的に探索した結果を得ることが出来ます。
  • これを使えば、ユーザー自身が再帰処理を書く必要は無さそうです。
  • ただしフォルダ名は不要なので、ファイルのみを抽出する必要があります。
作成したコード
(Get-ChildItem C:\test -Recurse).FullName
実行結果
C:\test\test1
C:\test\test2
C:\test\test3
C:\test\a.txt
C:\test\b.txt
C:\test\c.txt
C:\test\test1\test1-1
C:\test\test1\test1-2
C:\test\test1\123.txt
C:\test\test1\test1-1\abc.txt
C:\test\test1\test1-1\def.txt
C:\test\test1\test1-2\xyz.txt
C:\test\test2\aaa.txt
C:\test\test3\bbb.txt

出来上がったコード

  • Get-ChildItemで得られた結果(リスト)をループで回して、ファイルサイズ($file.Length)を加算するだけのコードです。
    • 自分で再帰処理を書く必要がないので、コードがかなりスッキリした印象です。
  • Get-ChildItemのパラメーターに-Fileを加えると、ファイルのみを取得することができます。
    • これは非常に分かりやすく、なおかつありがたい機能でした。
  • エクスプローラーの表示と同じ「45628バイト」を求めることが出来ました。
作成したコード
$targetFolder = "C:\test"

$fileList = (Get-ChildItem $targetFolder -Recurse -File)
$fileSize = 0

foreach($file in $fileList) {
	#Write-Host "$($file.FullName): $($file.Length)"
	$fileSize += $file.Length
}

Write-Host "$($targetFolder)のサイズは$($fileSize)バイトです。"
実行結果
C:\testのサイズは45628バイトです。

image.png

参考URL

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?