Batch: cancellare tutti i file e le sottocartelle contenute in una cartella padre (e invio del log via mail)

| |

Un lavoro semplicissimo se fatto in maniera interattiva, ma si risolve facilmente anche in batch nel caso in cui debba essere ripetuto tramite schedulazione, magari su un server, magari di una cartella su uno spazio condiviso (poi vedete voi eh, è riutilizzabile in mille contesti differenti).

Batch: cancellare tutti i file e le sottocartelle contenute in una cartella padre (e invio del log via mail) 1

Il codice è semplice, data una cartella di partenza tutto ciò che c’è dentro deve sparire, a prescindere che si tratti di sottocartelle contenenti file o che questi si trovino direttamente nella root. Una volta alla settimana bisognerà lanciare una “pulizia di primavera“, questo è il contenuto del mio batch:

> %logfile%
for /f "delims=;" %%D in (%logfile%) do (del /f /q "%%D" & rd /s /q "%%D")
cscript C:\scripts\sendlog.vbs
del /q %logfile%

Ciò che andrà toccato è chiaramente la variabile “logfile” (file dove verrà tenuta traccia di ciò che verrà eliminato) e quella “folder“, la cartella sotto la quale non dovrà più esistere alcunché. Il richiamo al sendlog.vbs tramite cscript (così da non chiedere nulla a video) servirà (come facilmente intuibile) a inviare via mail ciò che è stato trovato e rimosso, il codice ve l’ho già fatto vedere (ne sono quasi certo) in passato ma l’ho ovviamente modificato per l’occasione e ve lo ripropongo:

Set email = CreateObject("CDO.Message")
Set objNTInfo = CreateObject("WinNTSystemInfo")
Set objFSO = CreateObject("scripting.filesystemobject")
Set objArgs = WScript.Arguments

' Date and time
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
dtmLocalTime = objItem.LocalDateTime
dtmMonth = Mid(dtmLocalTime, 5, 2)
dtmDay = Mid(dtmLocalTime, 7, 2)
dtmYear = Left(dtmLocalTime, 4)
dtmHour = Mid(dtmLocalTime, 9, 2)
dtmMinutes = Mid(dtmLocalTime, 11, 2)
dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next
datacorrente = dtmDay & "/" & dtmMonth & "/" & dtmYear
oracorrente = dtmHour & ":" & dtmMinutes
'DEBUG: togliere il commento qui di seguito se si vuole visualizzare a video data e ora corrente
'Wscript.Echo datacorrente & " alle " & oracorrente

email.Subject = "Cleanup cartella CARTELLA"
email.From = "root@localhost.tld"
email.To = "me@localhost.tld"
email.Cc = "log@locahost.tld"
'email.Bcc = DestinationBCC
email.TextBody = "Pulizia CARTELLA terminata con successo il " & datacorrente & " alle " & oracorrente & vbCRLF & vbCRLF & vbCRLF & "In allegato il log di cartelle e file rimossi." & vbCRLF & vbCRLF
email.AddAttachment "C:\scripts\cleanup.txt"
email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.localhost.tld"
email.Configuration.Fields.Update
email.Send
set email = Nothing

Ciò che andrà toccato in questa occasione? Abbastanza intuibile:

  • email.Subject: l’oggetto da assegnare alla mail che vi verrà recapitata (a voi o chiunque dovrà occuparsi di controllare la buona riuscita dell’operazione);
  • email.From: un mittente dal quale far arrivare il log, può non essere reale se il vostro SMTP interno accetta connessione senza autenticazione e chi riceve lascia passare la mail da quel dominio senza particolari controlli antispam;
  • email.To: chi dovrà ricevere la comunicazione (tra le virgolette basterà usare una virgola per separare più indirizzi di posta, ndr);
  • email.Cc: come sopra ma ovviamente in copia conoscenza;
  • email.Bcc: commentato nel codice. Può essere ovviamente attivato togliendo il commento e può mandare la stessa mail in copia conoscenza nascosta;
  • email.TextBody: il corpo della mail che cattura ora e data dalla macchina che lancia la pulizia e allega il file di log (email.AddAttachment, ndr) per permettere di consultare quanto fatto;
  • forse inutile dirlo ma al posto di smtp.localhost.tld andrà riportato un vostro SMTP server interno, lo script non prevede (come potete vedere voi stessi) autenticazione, se volete includerla vi rimando allo script originale sul Wiki.

Mettete lo script nelle operazioni pianificate di un Windows sempre acceso, scegliete ora e giorno “et voilà“, il gioco è fatto.

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! :-)

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.

9 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments