我正在编写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吗?
答案 0 :(得分:35)
在您的特定情况下,您想要的是Tree /f
。你有一个评论,询问如何剥离前面的部分谈论音量,序列号和驱动器号。这可以在将输出发送到文件之前过滤输出。
$Path = "C:\temp"
Tree $Path /F | Select-Object -Skip 2 | Set-Content C:\temp\output.tkt
上面示例中的树输出是我们可以操作的System.Array
。 Select-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