segunda-feira, 28 de novembro de 2011

Script VBS para sincronização de arquivos

O Script compara o caminho de origem com o de destino, caso o caminho de destino não exista, ele será criado, caso já exista será comparada a data de modificação da origem com o destino, caso a origem seja mais atual que o destino, será copiado o arquivo atual para o caminho de destino.

Segue o script do arquivo VBS:



Set objFSO = CreateObject("Scripting.FileSystemObject")
Const objStartFolder = "R:" 'Declara a constante da pasta de origem
Const DestinationFolder = "C:\Linx" 'Declara constante da pasta de destino

Set objFolder = objFSO.GetFolder(objStartFolder)
Wscript.Echo Replace(objFolder.Path,objStartFolder,DestinationFolder)
dim PastaDestino
PastaDestino = Replace(objFolder.Path,objStartFolder,DestinationFolder)
If objFSO.FolderExists(PastaDestino) Then ' Verifica se o diretório a processar existe no destino
'Caso exista, informa em um echo
Set objFolderD = objFSO.GetFolder(PastaDestino)
WScript.Echo "Verificando " & PastaDestino
Else
'Caso não exista, cria e informa a criação em echo
Set objFolderD = objFSO.CreateFolder(PastaDestino)
WScript.Echo "Verificando " & PastaDestino
End If

Set colFiles = objFolder.Files
For Each objFile in colFiles
If NOT objFSO.FileExists(PastaDestino & "\" & objFile.Name) Then 'Se não existir arquivos na pasta de destino e no nome do arquivo do objeto
'Se o arquivo não existir no diretório de destino da cópia.
objFile.Copy PastaDestino & "\"
Wscript.Echo "Copiando: " & PastaDestino & "\" & objFile.Name
Else
If objFile.DateLastModified > objFSO.GetFile(PastaDestino & "\" & objFile.Name).DateLastModified Then
'Se o arquivo é mais recente que o arquivo de destino da cópia lá
objFile.Copy PastaDestino & "\", True
Wscript.Echo "Copiando: " & PastaDestino & "\" & objFile.Name
End If
End If
Wscript.Echo PastaDestino & "\" & objFile.Name
Next
Wscript.Echo

ShowSubfolders objFSO.GetFolder(objStartFolder)

Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
'Poderá incluir diretorios que não serão copiados.
If InStr(Subfolder.Path,"\imagens") < 2 and InStr(Subfolder.Path,"\Words") < 2 and InStr(Subfolder.Path,"\PACOTE") < 2 and InStr(Subfolder.Path,"Report\outros") < 2 and InStr(Subfolder.Path,"\Linx_5.8") < 2 and InStr(Subfolder.Path,"\View") < 2 and InStr(Subfolder.Path,"\Logo") < 2 and InStr(Subfolder.Path,"\PROJETO ETIQUETAS PAULOLINX") < 2 Then
'Se a pasta não é parte das pastas proibidas acima, ele libera a copia...
Wscript.Echo Replace(Subfolder.Path,objStartFolder,DestinationFolder)
Set objFolder = objFSO.GetFolder(Subfolder.Path)
PastaDestino = Replace(objFolder.Path,objStartFolder,DestinationFolder)
'---------------- Tratamento de pastas
If objFSO.FolderExists(PastaDestino) Then ' Verifica se o diretório a processar existe no destino
'Caso exista, informa em um echo
Set objFolderD = objFSO.GetFolder(PastaDestino)
WScript.Echo "Verificando " & PastaDestino
Else
'Caso não exista, cria e informa a criação em echo
Set objFolderD = objFSO.CreateFolder(PastaDestino)
WScript.Echo "Verificando " & PastaDestino
End If
'---------------- /Tratamento de pastas
Set colFiles = objFolder.Files
For Each objFile in colFiles
If NOT objFSO.FileExists(PastaDestino & "\" & objFile.Name) Then 'Se não existir arquivos na pasta de destino e no nome do arquivo do objeto
'Se o arquivo não existir no diretório de destino da cópia lá.
objFile.Copy PastaDestino & "\"
Wscript.Echo "Copiando: " & PastaDestino & "\" & objFile.Name
Else
If objFile.DateLastModified > objFSO.GetFile(PastaDestino & "\" & objFile.Name).DateLastModified Then
'Se o arquivo é mais recente que o arquivo de destino da cópia lá
objFile.Copy PastaDestino & "\", True
Wscript.Echo "Copiando: " & PastaDestino & "\" & objFile.Name
End If
End If
'Wscript.Echo PastaDestino & "\" & objFile.Name
'Wscript.Echo objFile.Name
Next
Wscript.Echo
ShowSubFolders Subfolder
End If
Next
End Sub
Wscript.Echo "O Linx foi sincronizado com o servidor"