web-dev-qa-db-fra.com

Utilisez PowerShell pour générer une liste de fichiers et de répertoires

J'écris un script PowerShell pour créer plusieurs répertoires et copier un ensemble de fichiers afin de "compiler" une documentation technique. J'aimerais générer un manifeste des fichiers et des répertoires dans le fichier readme, et j'aimerais que PowerShell le fasse, car je travaille déjà dans PowerShell pour effectuer la "compilation".

J'ai déjà effectué quelques recherches et il semble que je devrais utiliser l'applet de commande "Get-ChildItem", mais cela me donne trop de données, et je ne suis pas sûr de savoir comment formater et tailler ce que je ne fais pas. veux obtenir mes résultats souhaités.

Je voudrais une sortie semblable à ceci:

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

ou peut-être quelque chose comme ça:

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

En d'autres termes, une sorte de représentation visuelle ASCII de base de la structure arborescente avec les noms de répertoire et de fichier et rien d'autre. J'ai vu des programmes qui le font, mais je ne suis pas sûr si PowerShell peut le faire.

PowerShell peut-il le faire? Si tel est le cas, Get-ChildItem serait-il la bonne applet de commande?

16

Dans votre cas particulier, ce que vous voulez, c'est Tree /f. Vous avez un commentaire vous demandant comment effacer la partie au début qui parle du volume, du numéro de série et de la lettre de lecteur. Cela est possible en filtrant la sortie avant de l'envoyer au fichier. 

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

La sortie de Tree dans l'exemple ci-dessus est un System.Array que nous pouvons manipuler. Select-Object -Skip 2 supprimera les 2 premières lignes contenant ces données. En outre, si Keith Hill était présent, il recommanderait également les extensions de communauté PowerShell (PSCX) contenant la cmdlet Show-Tree. Téléchargez depuis ici si vous êtes curieux. Beaucoup de choses puissantes là-bas. 

32
Matt

Le script suivant montrera l’arbre comme une fenêtre, il peut être ajouté à n’importe quel formulaire présent dans le script 

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

Le moyen le plus clair et le mieux pour moi est:

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