wake-up-neo.com

Verwenden Sie PowerShell, um eine Liste von Dateien und Verzeichnissen zu erstellen

Ich schreibe ein PowerShell-Skript, um mehrere Verzeichnisse zu erstellen und mehrere Dateien zusammen zu kopieren, um einige technische Dokumentationen zu "kompilieren". Ich möchte ein Manifest der Dateien und Verzeichnisse als Teil der Readme-Datei erstellen, und ich möchte, dass PowerShell dies tut, da ich bereits in PowerShell arbeite, um das "Kompilieren" durchzuführen.

Ich habe bereits etwas gesucht und es scheint, dass ich das Cmdlet "Get-ChildItem" verwenden muss, aber es gibt mir zu viele Daten und ich bin nicht klar, wie ich das formatieren und ausschneiden sollte, was ich nicht finde möchte meine gewünschten Ergebnisse erzielen.

Ich möchte eine Ausgabe ähnlich der folgenden:

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

oder vielleicht so etwas:

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

Mit anderen Worten, eine Art visuelle ASCII - Darstellung der Baumstruktur mit den Verzeichnis- und Dateinamen und sonst nichts. Ich habe Programme gesehen, die dies tun, aber ich bin nicht sicher, ob PowerShell dies kann.

Kann PowerShell das tun? Wenn ja, wäre Get-ChildItem das richtige Cmdlet?

16

In Ihrem speziellen Fall möchten Sie Tree /f. Sie haben einen Kommentar, in dem Sie gefragt werden, wie Sie entfernen Sie den Teil an der Vorderseite, der über Volume, Seriennummer und Laufwerksbuchstaben spricht. Das ist möglich, die Ausgabe zu filtern, bevor Sie sie an eine Datei senden. 

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

Die Ausgabe von Tree im obigen Beispiel ist ein System.Array, den wir bearbeiten können. Select-Object -Skip 2 entfernt die ersten 2 Zeilen, die diese Daten enthalten. Wenn Keith Hill in der Nähe ist, würde er auch die PowerShell Community Extensions (PSCX) empfehlen, die das Cmdlet Show-Tree enthält. Download von hier wenn Sie neugierig sind. Es gibt viele mächtige Sachen. 

32
Matt

Das folgende Skript zeigt den Baum als Fenster an, er kann zu jedem im Skript vorhandenen Formular hinzugefügt werden 

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
   [email protected](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

Der beste und klarste Weg für mich ist:

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