【问题标题】:How can you use PowerShell to get a tree list of directories and metadata [duplicate]如何使用 PowerShell 获取目录和元数据的树列表 [重复]
【发布时间】:2021-12-07 05:34:14
【问题描述】:

我想生成文件夹和子文件夹的树状列表,以及其中文件的名称和所有者。例如:

FOLDER

>File0.ppt - Owner0

>SUBFOLDER_1

    >File1.1.docx - Owner_A

    >File1.2.pdf - Owner_B

>SUBFOLDER_2

    >File2.1.xlsx - Owner A

任何想法我怎么能得到这个?我知道如何获得其中之一,但不能同时获得。

谢谢!

【问题讨论】:

    标签: powershell directory tree metadata hierarchy


    【解决方案1】:

    有其他方法可以做到这一点,但我试图将输出视为文本。 作为对象,这将是一个单行。

    Function Recurse($folder, $lvl) {
    
        Get-ChildItem -Path $folder -File | ForEach-Object {
            Write-Host "$("  "*$lvl)> $($_.Name) - $((Get-Acl -Path $_.FullName).Owner)"
        }
    
        Get-ChildItem -Path $folder -Directory | ForEach-Object {
            Write-Host "$("  "*$lvl)> $($_.Name)"
            Recurse -folder $_.FullName -lvl $($lvl+1)
        }
    }
    
    $root = Get-Item -Path $path
    Recurse -folder $root.FullName -lvl 0
    

    【讨论】:

    • 谢谢,Hazrelle。我需要编辑什么才能从特定文件夹开始?你会如何定义 $lvl?
    • $path = "C:\MyFolder" 仅此而已:) $lvl 只是为了维护一个计数器。调用函数时应始终为 0。它只是在写入文件夹名称或文件名时提供“空格”,以便您可以可视化层次结构。
    • 啊,我不确定它必须是 $Folder 还是 $Path。我如何将其输出为 .csv 文件?
    • CSV 是一个平面文件,不打算显示层次结构。 Json 更适合这种表示。但是如果你想要一个扁平化的显示,那么脚本就更容易了。 $path = "c:\analysis" $outpath = "c:\myfolder\mycsvout.csv" Get-ChildItem -Recurse -Path $path |选择对象名称,@{l="Type";e={ if ($_.Attributes.HasFlag([System.IO.FileAttributes]::Directory)) { "Directory" } else {"File" }}} , @{l="所有者"; e={(Get-Acl -Path $_.FullName).Owner}} | Export-Csv -Path $outpath -NoTypeInformation -Encoding UTF8 -Delimiter ';'
    • 再次感谢。不幸的是,这个新代码没有按层次顺序输出信息。有没有其他方法可以导出输出,使其看起来像我原来的问题?
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2015-02-04
    • 2015-09-12
    • 1970-01-01
    • 2014-06-06
    • 2016-01-20
    • 2013-11-18
    • 2010-12-03
    相关资源
    最近更新 更多