mercoledì 28 marzo 2018

Powershell: cancellare vecchi files.

Può essere utile poter cancellare, da un percorso base comprese eventuali sottocartelle, dei file più vecchi di una certa data.

I motivi possono essere vari.

Per esempio:


  • Nei miei programmi in Python scrivo dei files di log, che hanno nel nome data e ora di esecuzione, per tracciare eventuali anomalie o errori. Dopo un po' di tempo potrebbero essere cancellati.
  • Da poco stiamo utilizzando un SW per la stampa delle etichette (Bartender), che viene comandato dal gestionale SAP tramite un normale file di testo. Una volta stampata l'etichetta in modo corretto il file viene archiviato in una cartella che contiene lo storico. Anche questi dopo qualche tempo si possono cancellare.
  • etc.

Ho scritto uno script per PowerShell di Windows che effettua la cancellazione di file più vecchi di n giorni.

evidenziato in azzurro i parametri da modificare secondo le vs. necessità.

#----------------------------------------------------------------------+
# Script     : delete_older_than.ps1 versione 1.0 del 27/03/2018       |
#----------------------------------------------------------------------+
# Autore     : Fabio Giacobbe - 27/03/2018                             |
# Descrizione: Rimuove file più vecchi di <n> giorni.                  |
#----------------------------------------------------------------------+
# Modifiche  :            by                                           |
# Note       :                                                         |
#----------------------------------------------------------------------+

#----- Definizione Parametri -----#
$Giorni     = "90"                # Numero giorni da conservare
$Estensione = "*.txt"             # Estensione files
$Percorso   = "E:\path"           # Percorso base da controllare 

#---- Prendi data del giorno  ----#
$Adesso = Get-Date

#---- Calcola data limite     ----#
$DataLimite = $Adesso.AddDays(-$Giorni)

#----- Prepara lista files del percorso base ---#
$Files = Get-ChildItem $Percorso -include $Estensione -Recurse | where {$_.LastwriteTime -le "$DataLimite"}

#----- Per ogni file della lista: stampa e cancella ----#
foreach ($File in $Files)
{
    if ($File -ne $Null)
    {
        write-host "Cancellare File $File" 
        Remove-item $File.Fullname | out-null
    }
}

NOTA BENE: per poter schedulare un task con script Powershell bisogna abilitare l'esecuzione degli script oppure lanciare il job con il parametro: -ExecutionPolicy Bypass


Nessun commento:

Posta un commento