PowerShell - 列出 TreeView GUI 元素中的所有文件夹和子文件夹

溴257

我正在尝试在 TreeView PowerShell 元素中列出驱动器 C: 的所有目录和子目录。

目前它只列出一个子文件夹实例,但我无法选择这些子文件夹来查看其中的目录。

这是代码:

function tree {

   [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
   [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")

   $Form = New-Object System.Windows.Forms.Form
   $Form.Text = "Files"
   $Form.Size = New-Object System.Drawing.Size(390, 390)

   $TreeView = New-Object System.Windows.Forms.TreeView
   $TreeView.Location = New-Object System.Drawing.Point(48, 12)
   $TreeView.Size = New-Object System.Drawing.Size(290, 322)
   $Form.Controls.Add($TreeView)


   $rootnode = New-Object System.Windows.Forms.TreeNode
   $rootnode.text = "Root"
   $rootnode.name = "Root"
   [void]$TreeView.Nodes.Add($rootnode)


   $array=@(Get-ChildItem -Path C:\Users)
   Write-Host $array
   foreach ( $obj in $array ) {                                                                                                             
        Write-Host $obj
        $subnode = New-Object System.Windows.Forms.TreeNode
        $subnode.text = $obj
        [void]$rootnode.Nodes.Add($subnode)
     }

   $Form.Add_Shown({$Form.Activate()})
   [void] $Form.ShowDialog()

   }
   tree

这是运行中的 GUI:GUI

感谢所有为这个问题做出贡献的人。

跟随

您可以在主函数中插入一个函数,该函数以递归方式向树视图添加节点。

在下面的代码,我已经改变了你的函数的名称treeShow-DirectoryTree拥有它符合Verb-Noun的PowerShell函数的命名约定。

此外,如果硬编码根文件夹路径,我向RootFolder函数添加了一个参数,使其在使用中更加灵活。

function Show-DirectoryTree {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [string]$RootFolder
    )

    # recursive helper function to add folder nodes to the treeview
    function Add-Node {
        param (
            [System.Windows.Forms.TreeNode]$parentNode, 
            [System.IO.DirectoryInfo]$Folder
        )
        Write-Verbose "Adding node $($Folder.Name)"
        $subnode      = New-Object System.Windows.Forms.TreeNode
        $subnode.Text = $Folder.Name
        [void]$parentNode.Nodes.Add($subnode)
        Get-ChildItem -Path $Folder.FullName -Directory | ForEach-Object {
            Add-Node $subnode $_
        }
    }

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "Folders"
    $Form.Size = New-Object System.Drawing.Size(390, 390)

    $TreeView = New-Object System.Windows.Forms.TreeView
    $TreeView.Location = New-Object System.Drawing.Point(48, 12)
    $TreeView.Size = New-Object System.Drawing.Size(290, 322)
    $Form.Controls.Add($TreeView)

    $rootnode = New-Object System.Windows.Forms.TreeNode
    # get the name of the rootfolder to use for the root node
    $rootnode.Text = [System.IO.Path]::GetFileName($RootFolder.TrimEnd('\'))  #'# or use: (Get-Item -Path $RootFolder).Name
    $rootnode.Name = "Root"
    [void]$TreeView.Nodes.Add($rootnode)
    # expand just the root node
    $rootNode.Expand()

    # get all subdirectories inside the root folder and 
    # call the recursive function on each of them
    Get-ChildItem -Path $RootFolder -Directory | ForEach-Object {
        Add-Node $rootnode $_
   }

   $Form.Add_Shown({$Form.Activate()})
   [void] $Form.ShowDialog()

   # remove the form when done with it
   $Form.Dispose()
}

# call the function to show the directory tree 
# take off the -Verbose switch if you do not want console output
Show-DirectoryTree -RootFolder 'C:\Users' -Verbose

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

以cmd列出所有文件夹和子文件夹,但不列出文件

Powershell - 列出目录中的所有文件夹,在每个文件夹中提取最新的 .bak 文件,压缩它,将其复制到一个目录

Powershell 查找给定文件夹名称中的所有空文件夹和子文件夹

如何编写更改目录并列出所有文件和文件夹的 PowerShell 别名?

没有列出子目录的文件夹的Powershell文件夹大小

在Powershell中列出给定深度以下的文件夹

如何在powershell中列出onedrive文件夹?

列出R中没有子文件夹的文件夹中的所有文件

将文件夹中的所有文件和子文件夹列出到表中

列出文件夹中的所有文件以及子文件夹

列出文件夹中的所有文件ID(无子文件夹)

列出文件大小给定结构中的所有文件夹和子文件夹

使用 bash 列出所有文件夹和子文件夹

Powershell:将所有文件从文件夹和子文件夹移至单个文件夹

如何使用PowerShell从文件夹和所有子文件夹中删除所有访问规则?

将“ .backup”附加到Powershell 2.0中的所有文件,文件夹和子文件夹

命令列出文件夹中的所有文件以及Windows中的子文件夹

列出文件夹和子文件夹中的文件,并带有.txt文件的路径

在我的应用程序的资产目录中列出所有文件和文件夹(以及子文件夹),并检查资产是文件还是文件夹

如何列出tomcat文件夹中的所有文件?

列出所有子文件夹中的所有文件

在Haxe的文件夹中查找并列出所有文件/文件夹

列出某个时刻存在于Git存储库分支中的文件夹的所有子文件夹

如何合并两个Powershell命令以列出文件夹和ACL

PowerShell:将所有文件从子文件夹中的相同类型移动到子子文件夹

VBA在没有FileSystemObject的子文件夹中列出所有文件(快速方式)

列出目录中的所有文件夹(PHP)

列出网络位置中的所有共享文件夹

PowerShell for AWS:仅列出S3存储桶中的“文件夹”吗?