Per esigenze di "lavoro", dovevo cercare in una sottocartella, contente a sua volta una serie di sottocartelle (ognuna con il nome dell'utente), e specificatamente all'interno di una ulteriore sottocartella, se esistevano file: a questo punto, dovevo prelevare tutti i files che presentavano nel nome il carattere "_" (trattino basso) e copiarli in una cartella globale, poi gli stessi files insieme a tutti gli altri che non presentavano questa peculiarità andavano spostati in un altra unità per conservarli, divisi in sotto-directory, ciascuna chiamata in base ad un altro set di caratteri presenti nel nome del file (indipendente dal nome utente).
Ulteriore caratteristica di tutti questii files era l'univocità del nome presente e futura e l'estensione comune DST.
Alla fine, ho risolto il problema con il seguente script, che crea anche un file di log con lo storico dei files processati:
|
| Const ForReading = 1, ForWriting = 2, ForAppending = 8, OverwriteExisting = TRUE controllo = "" strPath = "\\nomeserver\condivisione$\percorso\Archivio\" ' tale cartella deve essere creata prima dell'esecuzione dello script cartella = "" file = "" segno = "" percorso = "" oggi = "" strName = "" dipart = "" strdipart = "" strComputer = "specifica il server dal quale viene eseguito lo script" 'messaggio = "Per il momento non sono presenti nuovi files." 'On error resume next ' Legge, formatta e scrive la Data Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") ' Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime") ' For Each objItem in colItems oggi = oggi & "Data: " & objItem.Day oggi = oggi & "/" & objItem.Month oggi = oggi & "/" & objItem.Year oggi = oggi & " - Ora: " & objItem.Hour oggi = oggi & "." & objItem.Minute oggi = oggi & "." & objItem.Second Next ' Set objFSO = CreateObject("Scripting.FileSystemObject") ' istruzione di azzeramento del file ' Set objTextFile = objFSO.OpenTextFile("\\nomeserver\condivisione$\percorso\Log\Log_Operazioni.txt", ForWriting, True) ' objTextFile.close Set objTextFile = objFSO.OpenTextFile("\\nomeserver\condivisione$\percorso\Log\Log_Operazioni.txt", ForAppending, True) ' Set objtmp = CreateObject("Scripting.FileSystemObject") ' objTextFile.WriteLine oggi objTextFile.WriteLine "Inizio elenco files processati e spostati per l'invio automatico." ' ShowSubfolders objFSO.GetFolder("specifica la cartella da dove iniziare la ricerca") Sub ShowSubFolders(Folder) For Each Subfolder in Folder.SubFolders dipart = "" file = "" percorso = Subfolder.Path if right(percorso, = "specifica la cartella che deve essere scansita" then 'objTextFile.WriteLine percorso 'Legge cartelle Set colFileList = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & percorso & "'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile In colFileList segno = "" strName = objFile.FileName ' objTextFile.WriteLine subfolder.Path 'objTextFile.WriteLine strName file = subfolder.Path & "\" & strName & ".DST" 'objTextFile.WriteLine file If strName <> "" Then dipart = mid(strName, 14, 5) 'objTextFile.WriteLine dipart If strName <> "" Then segno = mid(strName, 23, 1) 'objTextFile.WriteLine segno cartella = "\\nomeserver\condivisione$\percorso\" & dipart & "\" 'objTextFile.WriteLine cartella 'objTextFile.WriteLine file strFilePath = file 'objTextFile.WriteLine strFilePath 'objTextFile.WriteLine strPath ' ' verifica se la cartella esiste If objFSO.FolderExists(cartella) Then Set objFolder = objFSO.GetFolder(cartella) 'objTextFile.WriteLine "La cartella esiste già" Else ' creare la cartella Set objFolder = objFSO.CreateFolder(cartella) 'objTextFile.WriteLine "Ho creato la cartella" End If ' ' routine di copia files su cartella If segno = "_" Then ' copiare il file per inviarlo objtmp.CopyFile strFilePath,strPath,OverwriteExisting End If ' routine di spostamento files su cartella backup \\nomeserver\condivisione$\percorso CAMBIO PATH ASSOLUTO ' inizio = left(strFilePath, 3) 'objTextFile.WriteLine inizio statico = mid(strFilePath, 4, 80) 'objTextFile.WriteLine statico insieme = "\\nomeserver\condivisione$\percorso\" & statico objTextFile.WriteLine insieme ' ' ' objtmp.MoveFile insieme,cartella 'objTextFile.WriteLine cartella 'objTextFile.WriteLine file 'objTextFile.WriteLine strFilePath 'objTextFile.WriteLine insieme 'objTextFile.WriteLine "Fine dato singolo file" Next ' If strName <> "" Then strdipart = strdipart & " - " & dipart ' strName = "" end if ShowSubFolders Subfolder Next ' if strdipart <> "" then messaggio = "ATTENZIONE!!! |^_^| Sono presenti nuovi files per questi elementi: " & strdipart End Sub ' ' objTextFile.WriteLine messaggio ' Wscript.Echo messaggio objTextFile.WriteLine "Fine elenco files processati e spostati per l'invio automatico." objTextFile.WriteLine "------------------------------------------------------------------" objTextFile.close ' cartella = "" file = "" segno = "" percorso = "" oggi = "" strName = "" dipart = "" strdipart = "" strComputer = "" messaggio = "" |
| |
|
Nota: ho volutamente lasciato lo script sporco da molte righe con anteposto l'apice che, se attivate, scrivono sul file di log alcune variabili al fine di poter seguire delle fasi di esecuzione dello script che mi interessavano particolarmente.
E' stato testato eseguendolo da un server e facendogli eseguire tutte le operazioni di lettura e spostamento dei dati su un'unità di un altro server con condivisione amministrativa.
P.S. non badate troppo allo stile ed ai nomi delle variabili.