Ciao e benvenuto nella nostra community.
Dunque, la prima parte di script - come dicevi giustamente tu - si occupa di recuperare tutti i file (o meglio, tutte le entry che non sono directory) dalla directory corrente.
Get-ChildItem |
Where-Object {$_.Mode -NotMatch "d"}
A dire il vero personalmente preferisco questa variante, che non si appoggia ad una stringa ("d") per fare il test:
Get-ChildItem |
Where-Object { -not $_.PSIsContainer }
Ma il concetto non cambia. Bene, venendo a noi, quest'ultima pipeline:
ForEach-Object {
$b = ".\" + $_.Extension
Move-Item $_.Fullname $b
}
si occupa di effettuare un paio di operazioni per ogni elemento recuperato dal primo blocco. Innanzitutto crea una variabile
$b con un valore formato da
.\ e dall'estensione del file corrente (
$_.Extension), es .\txt, .\exe, .\xlsx e così via. Poi sposta (Move-Item) l'elemento corrente (individuato dal percorso completo
$_.FullName) verso la nuova directory (
$b).
Ciao, a presto!