2015-11-05 14 views
8

Sto provando a scorrere in modo ricorsivo tutte le cartelle in una directory, quindi faccio qualcosa all'interno di ciascuna directory. Crea un file di testo, per esempio.Powershell passa ciclicamente attraverso le cartelle, crea file in ogni cartella

posso ottenere tutte le sottocartella in una variabile in questo modo:

$folders = Get-ChildItem -Recurse | ?{ $_.PSIsContainer } 

Tuttavia, non riesco a creare un file all'interno di ogni sottodirectory - i file vengono invece creati nella directory superiore. Questo non funziona:

$folders | ForEach-Object { New-Item -ItemType file -Name "$_.txt" -path $_} 

Questo solleva un errore che la directory non si trova o che il percorso è troppo lungo.

Come si esegue qualcosa in ogni sottodirectory di cartelle nidificate?

risposta

15

Prova questo:

Get-ChildItem -Recurse -Directory | ForEach-Object {New-Item -ItemType file -Path "$($_.FullName)" -Name "$($_.Name).txt" } 

In sostanza, il comando Get-ChildItem restituisce una sequenza di DirectoryInfo oggetti. La proprietà FullName contiene il percorso completo, mentre Name contiene solo il nome della directory foglia.