【问题标题】:Return lowest level directory of multiple directories返回多个目录的最底层目录
【发布时间】:2019-07-10 05:10:39
【问题描述】:

我有一个包含大量目录列表的文件夹。我希望将没有更多目录的每个文件夹的路径作为字符串返回

示例目录结构

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
}

感谢任何帮助

【问题讨论】:

  • 不清楚你在问什么,选择每个 User1/2 深度最大的路径?您的代码没有显示任何标准来区分路径。
  • 您需要区分路径,一个简单的 if 语句将允许您根据路径的长度确定“最低”目录。

标签: powershell


【解决方案1】:

你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2022-08-11
    • 1970-01-01
    • 2015-08-12
    • 2013-05-30
    • 2020-03-22
    相关资源
    最近更新 更多