Reputation: 461
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
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