Página 1 de 1

[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 26 Fev 2016 14:40
por marceloleaes
Segue script comentado. Finalidade backup de um diretório raiz e todos os seus sub diretórios
Compactando com o ZIP nativo do Windows disponível desde o Windows XP. Edite conforme necessidade  ;)

Código: Selecionar todos

' Backup de diretório e sub-diretórios compactados
' Não necessita nenhum software adicional pois utiliza o recurso ZIP nativo do Windows
' Retirado do fórum itbr.org
' Por Marcelo Leães - [email protected]

Option Explicit
Dim arrResult

' Edite os caminhos conforme necessidade, primeiro é ORIGEM, segundo é DESTINO
' Mantenha a função GetFormattedDate para que o arquivo de saída possua Data. Atenção para não remover aspas.

arrResult = ZipFolder( "C:\Dell\", "D:\Backup-compactado-" & GetFormattedDate & ".zip" )

' Descomente este campo para receber telas de confirmação ao concluir a tarefa
' Para modo automatizado por agendador de tarefas, manter comentado.

'If arrResult(0) = 0 Then
'	If arrResult(1) = 1 Then
'		WScript.Echo "Sucesso!!! 1 diretorio vazio foi ignorado."
'	Else
'		WScript.Echo "Sucesso!!! " & arrResult(1) & " diretorios vazios foram ignorados"
'	End If
'Else
'	WScript.Echo "ERRO: " & Join( arrResult, vbCrLf )
'End If

' Daqui em diante não altere mais nada no código do Script

Function GetFormattedDate

  Dim strDate,StrDay,StrMonth,StrYear
  strDate = CDate(Date)
  strDay = DatePart("d", strDate)
  strMonth = DatePart("m", strDate)
  strYear = DatePart("yyyy", strDate)
  
  If strDay < 10 Then
    strDay = "0" & strDay
  End If
  
  If strMonth < 10 Then
    strMonth = "0" & strMonth
	
  End If
  
  GetFormattedDate =  strDay & "-" & strMonth & "-" & strYear
  
End Function

Function ZipFolder( myFolder, myZipFile )

	Dim intSkipped, intSrcItems
	Dim objApp, objFolder, objFSO, objItem, objTxt
	Dim strSkipped

	Const ForWriting = 2

	intSkipped = 0

	If Right( myFolder, 1 ) <> "\" Then
		myFolder = myFolder & "\"
	End If

	On Error Resume Next

	Set objFSO = CreateObject( "Scripting.FileSystemObject" )
	Set objTxt = objFSO.OpenTextFile( myZipFile, ForWriting, True )
	objTxt.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
	objTxt.Close
	Set objTxt = Nothing

	If Err Then
		ZipFolder = Array( Err.Number, Err.Source, Err.Description )
		Err.Clear
		On Error Goto 0
		Exit Function
	End If
	
	Set objApp = CreateObject( "Shell.Application" )

	For Each objItem in objApp.NameSpace( myFolder ).Items
		If objItem.IsFolder Then

			Set objFolder = objFSO.GetFolder( objItem.Path )
			If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then
				intSkipped = intSkipped + 1
			Else
				objApp.NameSpace( myZipFile ).CopyHere objItem
			End If
		Else
			objApp.NameSpace( myZipFile ).CopyHere objItem
		End If
	Next

	Set objFolder = Nothing
	Set objFSO    = Nothing

	If Err Then
		ZipFolder = Array( Err.Number, Err.Source, Err.Description )
		Set objApp = Nothing
		Err.Clear
		On Error Goto 0
		Exit Function
	End If

	intSrcItems = objApp.NameSpace( myFolder  ).Items.Count
	Do Until objApp.NameSpace( myZipFile ).Items.Count + intSkipped = intSrcItems
		WScript.Sleep 200
	Loop
	Set objApp = Nothing

	If Err Then
		ZipFolder = Array( Err.Number, Err.Source, Err.Description )
		Err.Clear
		On Error Goto 0
		Exit Function
	End If

	On Error Goto 0

	If intSkipped = 0 Then
		strSkipped = ""
	Else
		strSkipped = "diretorios vazios ignorados"
	End If

	ZipFolder = Array( 0, intSkipped, strSkipped )
	
End Function

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 03 Mar 2016 09:07
por viniciuscwb
Marcelo, tudo bom ?

Gostei do script, bem "feijão com arroz".. tudo que um Adm de redes espera !!

Aceita sugestões ? Pra deixar seu script 100% sugiro adicionar um campo pra retenção do histórico de backup, senão vai chegar uma hora em que não haverá mais espaço no destino.

Costumo utilizar o forfiles:

Código: Selecionar todos

forfiles -p "D:\" -s -d -15 -m *.zip -c "cmd /c del /a /f /q @path"
onde a string "-15" serão apagados os arquivos zip com mais de 15 dias no repositório.

Agora caso já possua esta função pode ignorar minha sugestão.

Obrigado!

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 03 Mar 2016 10:40
por marceloleaes
Tudo jóia Vinicius !

Então, realmente a ideia era ter um script simples para backup de algo pequeno ou arquivos de configuração, etc...

A ideia de remover os backups antigos é boa, eu costumo executar estes scripts com uma ferramenta de automação, um segundo script é chamado para fazer a limpeza depois, utilizo o mesmo script para outras finalidades tbem.

Vou deixar o código aqui, mas se quiser adicionar o recurso e postar novamente fique a vontade !!  ;)

Código: Selecionar todos

Set oFileSys = WScript.CreateObject("Scripting.FileSystemObject")

sRoot = "D:\Caminho"			
today = Date
nMaxFileAge = 3		'Dias a manter

DeleteFiles(sRoot)

Function DeleteFiles(ByVal sFolder)

	Set oFolder = oFileSys.GetFolder(sFolder)
	Set aFiles = oFolder.Files
	Set aSubFolders = oFolder.SubFolders

	For Each file in aFiles
		dFileCreated = FormatDateTime(file.DateCreated, "2")
		If DateDiff("d", dFileCreated, today) > nMaxFileAge Then
			file.Delete(True)
		End If
	Next

	For Each folder in aSubFolders
		DeleteFiles(folder.Path)
	Next

End Function

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 03 Mar 2016 14:46
por viniciuscwb
Bacana!

Outra dúvida, esse seu código faz cópias incrementais apenas full ?

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 03 Mar 2016 15:23
por marceloleaes
Apenas FULL , é um quebra galho para pequenas pastas e quantidade de arquivos.

Não substitui um software de backup.

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 10 Mar 2016 10:10
por viniciuscwb
Marcelo, tudo bem ?!

Esse script quebra galho é muito útil para pequenas cópias, o problema é que não está funcionando pra mim. Quando executo ele apresenta vários erros. As únicas linhas que editei foram origem e destino:

Código: Selecionar todos

arrResult = ZipFolder("C:\temp", "C:\teste\Backup-compactado-" & GetFormattedDate & ".zip")
Ele até cria o arquivo zip mas com 1kb

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 10 Mar 2016 10:18
por marceloleaes
Se inserir uma contra barra \  no caminho de origem o problema persiste ?


arrResult = ZipFolder("C:\temp\", "C:\teste\Backup-compactado-" & GetFormattedDate & ".zip")

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 10 Mar 2016 10:24
por viniciuscwb
Sim continua =/

vc tem skype ?

vinicius.suporteti é o meu

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 11 Mar 2016 11:00
por marceloleaes
Passa mais informações, versão do sistema operacional, se está em domínio, estado do UAC.

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 11 Mar 2016 13:43
por viniciuscwb
Sim.. UAC desabilitado, Windows 7 PRO 64-bit, máquina em Grupo de Trabalho.

Seu código não chama nenhum plugin ou executável para compactação. Como é feita esta compactação ?

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 22 Mar 2016 09:58
por marceloleaes
UAC desabilitado pode gerar um comportamento inesperado para que ele consiga pegar as permissões de arquivos e diretórios. Experimenta abrir o cmd como Administrador e executar ele com: cscript.exe script.vbs

Lógico, com o UAC ativo no sistema.

Re:[Script] VBS de backup simples com compactação nativa do Windows

Enviado: 07 Abr 2016 21:29
por viniciuscwb
Não amigo, segui suas instruções e o problema continua.. Falta informação no código como alguns campos não comentados e não estou conseguindo debuggar o erro, mas enfim, valeu a tentativa.

Quanto ao UAC, comigo ocorreu o inverso, já tive problemas de permissionamento com ele habilitado..

Eu tenho um script em ps1 que utiliza o robocopy para cópias incrementais, compactação e notificação por e-mail. Mais tarde eu posto aqui no fórum.


Agradeço a iniciativa.
Abçs

Re: [Script] VBS de backup simples com compactação nativa do Windows

Enviado: 08 Jan 2021 16:38
por olimpio
Tem como o script já fazer a compactação protegendo por senha ?

Caso sim, favor deixar o script alterado com a opção de senha.

Aguardo retorno