Bunion
Bunion

Reputation: 461

Return lowest level directory of multiple directories

I have a folder with a large list of directories. I wish return the path of each folder that have no more directories within as a string

Example Directory structure

C:\Users\Test\Desktop\xml\xml\User1\User1\user1\Windows\abc
C:\Users\Test\Desktop\xml\xml\User1\User1\user1\Windows1\
C:\Users\Test\Desktop\xml\xml\User2\User2\user2\Windows\
C:\Users\Test\Desktop\xml\xml\User2\User2\user2\Windows1\abc

Preferred output

C:\Users\Test\Desktop\xml\xml\User1\User1\user1\Windows\abc
C:\Users\Test\Desktop\xml\xml\User2\User2\user2\Windows1\abc

I have done the below, but this return each folder alow the way, through the directory structure not just the lowest level one.

foreach ($i in Get-ChildItem $Path -Directory -Recurse | Select FullName){
Write-Host $i.FullName
}

Any help is appreciated

Upvotes: 0

Views: 856

Answers (1)

SinOfficial
SinOfficial

Reputation: 556

You can do it like this:

function GetLowestLevelRecursive([System.Collections.IList] $directories)
{
    $lowestleveldirs = @()
    foreach ($dir in $directories)
    {
        $childDirs = $dir.GetDirectories();
        if ($childDirs.Length -gt 0)
        {
            $lowestleveldirs += GetLowestLevelRecursive $childDirs
        }
        else
        {
            $lowestleveldirs += $dir
        }
    }
    return $lowestleveldirs
}

#input directories
$allDirectories = @()

# search for lowest level directories
$lowestlvldirs = GetLowestLevelRecursive $allDirectories

foreach ($dir in $lowestlvldirs)
{
    Write-Host $dir.FullName
}

Expected output:

C:\Users\Test\Desktop\xml\xml\User1\User1\user1\Windows\abc
C:\Users\Test\Desktop\xml\xml\User2\User2\user2\Windows1\abc

Upvotes: 1

Related Questions