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

Scripts diversos para automatizar tarefas em servidores ou auxilio com tarefas administrativas.
Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem 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 - marcelo@eth1.com.br

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


"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem 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!

Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem 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
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem por viniciuscwb »

Bacana!

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

Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem por marceloleaes »

Apenas FULL , é um quebra galho para pequenas pastas e quantidade de arquivos.

Não substitui um software de backup.
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem 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
Editado pela última vez por viniciuscwb em 10 Mar 2016 10:14, em um total de 1 vez.

Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem por marceloleaes »

Se inserir uma contra barra \  no caminho de origem o problema persiste ?


arrResult = ZipFolder("C:\temp\", "C:\teste\Backup-compactado-" & GetFormattedDate & ".zip")
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem por viniciuscwb »

Sim continua =/

vc tem skype ?

vinicius.suporteti é o meu

Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem por marceloleaes »

Passa mais informações, versão do sistema operacional, se está em domínio, estado do UAC.
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem 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 ?

Avatar do usuário
marceloleaes
Administrator
Administrator
Mensagens: 1487
Registrado em: 10 Jun 2013 12:45
Localização: Novo Hamburgo
Idade: 38
Contato:
Status: Offline

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

Mensagem 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.
"Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

viniciuscwb
Newbie
Newbie
Mensagens: 11
Registrado em: 19 Nov 2015 11:08
Status: Offline

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

Mensagem 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

olimpio
Newbie
Newbie
Mensagens: 1
Registrado em: 08 Jan 2021 16:35
Status: Offline

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

Mensagem 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

Responder

Voltar para “Scripts”