IlSoftware.it - Il portale italiano sul software

Ricerca

venerdì 30 luglio


Copiare in un'unica directory i file contenuti in un insieme di sottocartelle

Copiare in un'unica directory i file contenuti in un insieme di sottocartelle

di Michele Nasi (12/03/2010)

Problema: com'è possibile, in ambiente Windows, copiare tutti i file contenuti in un gruppo di sottocartelle all'interno di un'unica directory?
Si supponga di avere N file, di qualunque tipologia, distribuiti in una una serie di sottocartelle "nidificate" tra loro. Come si può recuperare tutti i file contenuti nelle varie sottodirectory e memorizzarli all'interno di una medesima cartella?

Le soluzioni sono molteplici anche se per un'operazione come questa si può evitare di dover ricorrere ad un software sviluppato da terze parti.
Proponiamo quindi, di seguito, un approccio basato sull'utilizzo di uno script VBS.

Per utilizzarlo, basta creare un nuovo file con estensione .vbs. Cliccando con il tasto destro su di esso quindi scegliendo Modifica si potrà editarlo con il Blocco Note di Windows (in alternativa è possibile ricorrere a qualunque altro editor di testo).


All'interno del file .vbs si dovrà incollare quanto segue:

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\lavori\dir"
strDestination = "c:\temp\dir"

if right(strFolder,1)<>"\" then strFolder = strFolder & "\"
if right(strDestination,1)<>"\" then strDestination = strDestination & "\"

Set objFolder = objFS.GetFolder(strFolder)

Go(objFolder)

Sub Go(objDIR)
   If objDIR <> "\System Volume Information" Then
      For Each eFolder in objDIR.SubFolders
         Go eFolder
      Next
      For Each strFile In objDIR.Files
         strFileName = strFile.Name
         strExtension = objFS.GetExtensionName(strFile)
         If strExtension = "xls" Then
            if objFS.FileExists(strDestination & strFileName) then
               strFileName = objDIR.Name & "_" & strFileName
            end if
            objFS.CopyFile strFile , strDestination & strFileName
         End If
      Next
   End If
End Sub


A questo punto è necessario impostare i valori delle variabili strFolder (cartella di origine) e strDestination (cartella di destinazione).
Lo script VBS provvederà a copiare il contenuto di tutte le sottocartelle presenti nella directory strFolder salvandole poi nella cartella strDestination.

Com'è possibile verificare, lo script impiega poi un algoritmo ricorsivo per “scansionare” tutte le sottocartelle contenute nella directory di origine.

Nel caso in cui il file dovesse esistere già nella cartella di destinazione, il nome del file omonimo verrà modificato ponendo come prefisso il nome della directory che lo contiene (istruzione strFileName = objDIR.Name & "_" & strFileName).

Per come è stato sviluppato lo script, saranno copiati – dalla cartella di origine – solo i file con estensione xls. Ovviamente è possibile specificare un'altra estensione oppure personalizzare liberamente il blocco if (esempio: If strExtension = "xls" or strExtension = "doc" Then). La if può essere completamente eliminata nel caso in cui si desiderino copiare tutti i file, di qualunque tipologia.


Per avviare l'operazione di copia basta fare doppio clic sul file .vbs.

Suggeriamo di utilizzare il file VBS solo dopo averne ben compreso il funzionamento. In ogni caso è preferibile effettuare sempre almeno una copia di backup dei dati sui quali si intende operare.
Ultimi commenti
da franc.esco >
Basta effettuare una ricerca di tutti i file presenti nella cartella di origine, tagliarli dalla finestra "risultati di ricerca" e incollarli in quella di destinazione. E per farlo basta solo saper usare Windows, non serve saper programmare
da Michele Nasi >
Grazie Francesco per la precisazione. E' comunque un "tip" noto (ne avevamo già parlato in passato). Ho voluto invece presentare la soluzione basata sullo script VBS perché la ritengo più rapida da usare e può "processare" in un colpo solo tutti i tipi di file. Il lettore è poi libero di scegliere quella che più preferisce. :wink:
da Rob.erto >
Dovresti rivedere lo script: non funziona nel modo voluto... grazie
da jacopo >
Citazione: Dovresti rivedere lo script: non funziona nel modo voluto...
Cioè ?
da Rob.erto >
Citazione:
Citazione: Dovresti rivedere lo script: non funziona nel modo voluto...
Cioè ?
la terza riga va corretta così: strDestination = "c:\temp\dir\" :wink:


Leggi tutti i commenti

Link alla home page de IlSoftware.it

P.IVA: 02472210547 | Copyright © 2001 - 2010

Pubblicità | Contatti | Informazioni legali | Storia | Supporta | Imposta come home page | Credits

Segui i nostri Feed RSS de IlSoftware.it Segui i nostri Feed RSS