Site icon Gioxx.org

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).

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:

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:
Exit mobile version