none
フォルダの階層の数を調べるコマンドを教えてください RRS feed

  • 質問

  • ファイルサーバーの各フォルダの階層がそれぞれ何階層あるか、どのくらい深い階層のフォルダが存在しているのかを調べたいです。

    (共有ドライブを第一階層とします)

    そのようなことを調べられるコマンドはあるのでしょうか?

    よろしくお願いします。

    2019年9月2日 1:10

回答

  • チャブーンです。

    この件ですが、「ディレクトリの階層をカウントする」コマンドはありません。ですから、PowerShellで「計算」するしかないと思います。しかたないので考えると、ディレクトリ区分け記号の「\」(バックスラッシュ・円マーク)について、ディレクトリオブジェクトのフルパス(FullName)から抽出して数えると、わかると思います。

    したの例は「ローカルパス」に関して、ルートフォルダーに対して「最大階層数」を計算するスクリプトです。共有フォルダーをホストするサーバーでそのまま使えばよいと思いますが、リモートでどうにかしたい、ということなら、New-PSDriveで共有フォルダーをマウントして、フルパス相当のプロパティに対して同じリクツで対応することになると思います。

    $RootDirectory = "C:\HogeHoge\HareHare"
    
    IF ($RootDirectory.EndsWith("`\")) {
    	$RootDirectory = $RootDirectory.Substring(0,($RootDirectory.length - 1))
    }
    
    $Directories = Get-ChildItem $RootDirectory -recurse | Where {$_.PSIsContainer -eq $True}
    
    $NumberOfDirectoryLevels = @()
    
    Foreach ($Directory in $Directories) {
    	$ChildDirectory = ($Directory.FullName).Substring($RootDirectory.length,(($Directory.FullName).Length - $RootDirectory.length))
    	
    	$NumberOfDirectoryLevel = New-Object PSObject -Property @{
    		NumberOfDirectoryLevel = $ChildDirectory.Length - ($ChildDirectory.Replace("`\","")).length	
    	}
    	
    	$NumberOfDirectoryLevels += $NumberOfDirectoryLevel
    
    }
    
    
    ($NumberOfDirectoryLevels | Measure-Object -property NumberOfDirectoryLevel -Maximum).Maximum

    https://www.reddit.com/r/sysadmin/comments/13ifi2/powershell_how_to_create_a_array_with_mutilple/
    http://blog.powershell-from.jp/?p=247


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • 回答としてマーク Sophie_55 2019年9月2日 6:11
    2019年9月2日 4:36

すべての返信

  • チャブーンです。

    この件ですが、「ディレクトリの階層をカウントする」コマンドはありません。ですから、PowerShellで「計算」するしかないと思います。しかたないので考えると、ディレクトリ区分け記号の「\」(バックスラッシュ・円マーク)について、ディレクトリオブジェクトのフルパス(FullName)から抽出して数えると、わかると思います。

    したの例は「ローカルパス」に関して、ルートフォルダーに対して「最大階層数」を計算するスクリプトです。共有フォルダーをホストするサーバーでそのまま使えばよいと思いますが、リモートでどうにかしたい、ということなら、New-PSDriveで共有フォルダーをマウントして、フルパス相当のプロパティに対して同じリクツで対応することになると思います。

    $RootDirectory = "C:\HogeHoge\HareHare"
    
    IF ($RootDirectory.EndsWith("`\")) {
    	$RootDirectory = $RootDirectory.Substring(0,($RootDirectory.length - 1))
    }
    
    $Directories = Get-ChildItem $RootDirectory -recurse | Where {$_.PSIsContainer -eq $True}
    
    $NumberOfDirectoryLevels = @()
    
    Foreach ($Directory in $Directories) {
    	$ChildDirectory = ($Directory.FullName).Substring($RootDirectory.length,(($Directory.FullName).Length - $RootDirectory.length))
    	
    	$NumberOfDirectoryLevel = New-Object PSObject -Property @{
    		NumberOfDirectoryLevel = $ChildDirectory.Length - ($ChildDirectory.Replace("`\","")).length	
    	}
    	
    	$NumberOfDirectoryLevels += $NumberOfDirectoryLevel
    
    }
    
    
    ($NumberOfDirectoryLevels | Measure-Object -property NumberOfDirectoryLevel -Maximum).Maximum

    https://www.reddit.com/r/sysadmin/comments/13ifi2/powershell_how_to_create_a_array_with_mutilple/
    http://blog.powershell-from.jp/?p=247


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    • 回答としてマーク Sophie_55 2019年9月2日 6:11
    2019年9月2日 4:36
  • 回答ありがとうございます。

    コマンドはないのですね。

    スクリプトありがとうございました。こちらを使わせていただきます。

    自分のPCで試したところ階層数が取得できました。サーバー上で直接操作する予定です。

    ありがとうございました!

    2019年9月2日 6:11