Script VBS - Potrebbe interessare
(1/1)
ridethesnake:
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, 8) = "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.
:wallbash:
Navigazione
[0] Indice dei post
Vai alla versione completa