23 nov 2009

Copia dinamica su memoria USB

Recentemente ho avuto l'esigenza di effettuare in automatico il backup di alcuni dati su di una memoria USB.

Sembrerebbe semplicissimo, peccato però che il nome dell'unità USB non sia fisso, ma possa cambiare a seconda dell'ordine con cui eventuali apparati USB sono collegati al sistema. Con un po' di VBS si risolve però tutto:

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives

Unita = ""

For Each objDrive in colDrives
  If objDrive.isReady Then
    If objDrive.DriveType = 1 Then
      Unita = objDrive.DriveLetter
    End If
  End If
Next

If Unita = "" Then
  Wscript.Echo "Memoria USB non rilevata! Impossibile Salvare"
  Wscript.Quit(1)
End If

Wscript.Echo "Salvataggio in corso in " & Unita & ":\Backup\"

objFSO.CreateFolder(Unita & ":\Backup\")
Err.Clear

objFSO.CopyFile "C:\Percorso\Origine.dat", Unita & ":\Backup\VaccinatiBAK.dat", True

If (Err.Number > 0) Then
  Wscript.Echo "Errore nella copia di backup: " & Err.Description
Else
  Wscript.Echo "Copia OK"
End If

objDrive.DriveType vale 1 per le unità di tipo Flash. Ricercando soltanto le unità con objDrive.isReady impostato a vero si escludono eventuali unità quali lettori di card flash, nel caso in cui una flash card non sia inserita, ovviamente.

In casi particolari, dove si utilizzano molte unità USB flash, non ci sono molte possibilità di indovinare l'unità giusta: allora non ci resta che assegnare un nome al disco USB ed effettuare un filtro sul campo objDrive.VolumeName.

Nessun commento: