..:: Aiuto con il computer e non solo... ° The Help Center ::..
> Linguaggi di Programmazione

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

E' avvenuto un errore mentre ringraziavi
Ringraziando...
Vai alla versione completa