使用PowerShell生成文件和目录列表

时间:2014-12-12 15:37:19

标签: powershell powershell-v2.0 get-childitem

我正在编写PowerShell脚本来制作多个目录并将一堆文件复制到一起来“编译”一些技术文档。我想生成文件和目录的清单作为自述文件的一部分,我希望PowerShell能够这样做,因为我已经在PowerShell中进行“编译”了。

我已经做了一些搜索,似乎我需要使用cmdlet“Get-ChildItem”,但它给了我太多的数据,而且我不清楚如何格式化和修剪我的内容不想得到我想要的结果。

我想要一个与此类似的输出:

Directory
     file
     file
     file
Directory
     file
     file
     file
     Subdirectory
          file
          file
          file

或者可能是这样的:

+---FinGen
|   \---doc
+---testVBFilter
|   \---html
\---winzip

换句话说,树结构的某种基本可视化ASCII表示与目录和文件名无关。我见过程序执行此操作,但我不确定PowerShell是否可以执行此操作。

PowerShell可以这样做吗?如果是这样,Get-ChildItem会是正确的cmdlet吗?

5 个答案:

答案 0 :(得分:35)

在您的特定情况下,您想要的是Tree /f。你有一个评论,询问如何剥离前面的部分谈论音量,序列号和驱动器号。这可以在将输出发送到文件之前过滤输出。

$Path = "C:\temp"
Tree $Path /F | Select-Object -Skip 2 | Set-Content C:\temp\output.tkt

上面示例中的树输出是我们可以操作的System.ArraySelect-Object -Skip 2将删除包含该数据的前两行。此外,如果Keith Hill在附近,他还会推荐包含cmdlet Show-Tree的PowerShell社区扩展(PSCX)。如果您好奇,请从here下载。那里有很多强大的东西。

答案 1 :(得分:3)

以下脚本将树显示为窗口,可以将其添加到脚本中的任何表单

function tree {

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

   # create Window
   $Form = New-Object System.Windows.Forms.Form
   $Form.Text = "Files"
   $Form.Size = New-Object System.Drawing.Size(390, 390)
   # create Treeview-Object
   $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)

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

   #here i'm going to import the csv file into an array
   $array=@(Get-ChildItem -Path D:\personalWorkspace\node)
   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)
     }

   # Show Form // this always needs to be at the bottom of the script!
   $Form.Add_Shown({$Form.Activate()})
   [void] $Form.ShowDialog()

   }
   tree

答案 2 :(得分:1)

对我来说,最好和最明确的方法是:

PS P:\> Start-Transcript -path C:\structure.txt -Append
PS P:\> tree c:\test /F
PS P:\> Stop-Transcript

答案 3 :(得分:-1)

您可以使用命令Get-ChildItem -Path <yourDir> | tree >> myfile.txt这将输出目录的树状结构并将其写入&#34; myfile.txt&#34;

答案 4 :(得分:-1)

Windows中,导航到感兴趣的目录

Shift +右键单击鼠标-> Open PowerShell window here

Get-ChildItem | tree /f > tree.log