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.
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\"
Leggi tutti i commenti