Возвращает низкоуровневый каталог из нескольких каталогов - PullRequest
0 голосов
/ 09 июля 2019

У меня есть папка с большим списком каталогов.Я хочу вернуть путь к каждой папке, в которой больше нет каталогов, в виде строки

Пример структуры каталогов

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

Предпочтительный вывод

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

Я сделалниже, но это возвращает каждую папку в обратном направлении, через структуру каталогов, а не только самый нижний уровень.

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

Любая помощь приветствуется

1 Ответ

1 голос
/ 09 июля 2019

Вы можете сделать это так:

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
}

Ожидаемый результат:

C:\Users\Test\Desktop\xml\xml\User1\User1\user1\Windows\abc
C:\Users\Test\Desktop\xml\xml\User2\User2\user2\Windows1\abc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...