複数のディレクトリを作成し、いくつかのファイルを一緒にコピーして技術文書を「コンパイル」するためのPowerShellスクリプトを書いています。 readmeファイルの一部としてファイルとディレクトリのマニフェストを生成したいと思います。PowerShellで「コンパイル」を行うためにすでに作業しているので、PowerShellでこれを実行したいと思います。
既にいくつかの検索を実行しましたが、コマンドレット「Get-ChildItem」を使用する必要があるようですが、データが多すぎるため、フォーマットしない方法と不要なものを取り除く方法がわかりません希望する結果を取得したい。
次のような出力が必要です。
Directory
file
file
file
Directory
file
file
file
Subdirectory
file
file
file
または多分このようなもの:
+---FinGen
| \---doc
+---testVBFilter
| \---html
\---winzip
つまり、ある種の基本的な視覚的ASCIIディレクトリとファイル名を含むツリー構造の表現であり、他には何もありません。これを行うプログラムを見たことはありますが、PowerShellがこれを行う。
PowerShellはこれを実行できますか?もしそうなら、Get-ChildItemは正しいコマンドレットでしょうか?
あなたの特定の場合、あなたが望むのはTree /f
です。ボリューム、シリアル番号、およびドライブ文字について話す前部の部品を取り除く方法を尋ねるコメントがあります。ファイルに送信する前に出力をフィルタリングすることが可能です。
$Path = "C:\temp"
Tree $Path /F | Select-Object -Skip 2 | Set-Content C:\temp\output.tkt
上記の例のツリーの出力は、操作可能なSystem.Array
です。 Select-Object -Skip 2
は、そのデータを含む最初の2行を削除します。また、キースヒルがいれば、コマンドレットShow-Tree
を含むPowerShell Community Extensions(PSCX)もお勧めします。興味がある場合は、 here からダウンロードしてください。たくさんの強力なものがあります。
次のスクリプトは、ツリーをウィンドウとして表示します。スクリプトに存在する任意のフォームに追加できます
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
私にとって最良かつ明確な方法は次のとおりです。
PS P:\> Start-Transcript -path C:\structure.txt -Append
PS P:\> tree c:\test /F
PS P:\> Stop-Transcript