PowerShell: spostare file in cartelle per anno e mese (in base al nome)

| |

Cartelle piene zeppe di file CSV liberi come al pascolo e tempi di attesa per mostrare il contenuto di quelle cartelle che erano ormai diventati inaccettabili e ingestibili, avevo bisogno di fare ordine. Per questo motivo ho approfittato di una caratteristica di quei file CSV per dare in pasto a PowerShell l’onere di spostarli in cartelle e sottocartelle ben specifiche, che ricostruissero anno e mese contenuti nel nome del file. Il file CSV viene infatti definito con l’anno (4 cifre), il mese (2 cifre), il giorno (2 cifre), seguito poi da numeri d’ordine e altri dati che non mi servono ai fini della riorganizzazione.

A questo punto mi bastava prendere i primi 6 caratteri del nome del file per ottenere il mio risultato:

function DataReorg {
    $files = Get-ChildItem $args[0] -Recurse | where {!$_.PsIsContainer}
    $targetPath = $args[1]
    foreach ($file in $files)
    {
        $bn = $file.basename.ToString()
        $year = $bn.substring(0,4)
        $month = $bn.substring(4,2)
        $Directory = $targetPath + "\" + $year + "\" + $month
        if (!(Test-Path $Directory)) { New-Item $directory -type directory }
        $file | Move-Item -Destination $Directory
    }
}

DataReorg 'C:\Folder1\*.csv' 'C:\Folder1'

I riconoscimenti vanno a Chris Sprague che ha fornito molteplici esempi per agire sui file, tutti assolutamente sensati (basati anche sulla data di creazione o ultima modifica dei documenti, che in alcuni casi diventa fondamentale se non ti puoi basare sul nome), io mi sono limitato a fare un pelo di pulizia e trasformare in funzione ciò che mi serviva, così da poter richiamare in maniera decisamente più semplice la riorganizzazione.

La modalità d’uso dello script è semplice: non toccare nulla della funzione, limitati a cambiare la directory sorgente e destinazione che trovi in ultima riga (DataReorg 'C:\Folder1\*.csv' 'C:\Folder1') dove C:\Folder1\*.csv effettua la ricerca di tutti i file CSV contenuti in C:\Folder1 e il 'C:\Folder1' finale specifica la destinazione in cui verrà creato l’albero di cartelle e sottocartelle per anno e mese in base ai nomi file trovati, otterrai un risultato molto simile a questo:

Provato e perfettamente funzionante, molto comodo da tenere a portata di mano anche per future necessità. Per lanciarlo da un Prompt dei comandi ti basterà un powershell -ExecutionPolicy Bypass -File DataReorg.ps1 (ovviamente se hai salvato lo script PowerShell con quel nome e se lo esegui dalla stessa cartella in cui ti sei posizionato nel prompt, diversamente dovrai specificare il percorso completo. Ho pubblicato lo script anche su Gist per alimentare la collaborazione, lo trovi all’indirizzo gist.github.com/gioxx/9fed53c3607efe2be086ae3c1fff53ca.

#StaySafe

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato agli articoli "a bruciapelo"!
Se vuoi leggere le altre pillole fai clic qui.

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments