PowerShell: spostare file in cartelle per anno e mese

| |

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 crediti 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

×

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 ai post "a bruciapelo"!

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti: