locked
Exclusão de Conteúdo de pastas compartilhadas RRS feed

  • Pergunta

  • Pessoal bom dia,

    gostaria de ajuda para um problema que ainda não consegui resolver, o cenário e o seguinte;

    possuo uma estrutura de diretórios compartilhados com acesso irrestrito da seguinte forma:

    Pasta Pai: Publico

    Subpastas : alex , joao , pedro e etc ( ou seja são as pastas base de cada usuário de minha rede para armazenamento temporário de informações )

    Toda sexta feira a tarde tenho que apagar o "conteúdo" destas pastas " não as pastas em sí, pois senão terei que recriá-las novamente a cada exclusão.

    Como automatizar esta tarefa?

    quinta-feira, 15 de setembro de 2011 11:34

Respostas

  • Infelizmente para esta situação não Valmor,

    mas com a ajuda de um amigo conseguimos desenvolver um outro script aqui:

    ficou bem grande mas com o tempo iremos melhorá-lo, o importante e que esta funcional e o que é melhor ainda o mesmo ainda gera os logs de exclusão de cada subpasta e arquivos deletados


    segue o mesmo caso alguem necessite:

    Option Explicit
    
    
    Dim Path, FileLog, Arquivo, ArquivoSize
    Dim ObjFSO, Folder, MyFiles, MySubFolders, MyFolder 
    Dim ObjFileRead, ObjFileWrite, ObjFileAppending
    Dim NomeFileDeleted, NomeFolderDeleted
    Dim ActionDel, i
    
    On error resume next
    
    Path = "C:\TEMP" 'Pasta Raiz onde for desejado apagar os arquivos e subpastas
    FileLog = "logfile.txt"  'Nome do logfile
    ActionDel = "no"
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    
     
    
    
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    
    
    VerifySizeLog FileLog
    Set Folder = ObjFSO.GetFolder(Path)
    Set MyFiles = Folder.files
    Set MySubFolders = Folder.SubFolders
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    'Set ObjFileWrite = ObjFSO.opentextfile(FileLog, ForWriting, True)
     
     
     
    If Not ObjFSO.FolderExists(Path) Then
      WriteLog Path & " - não é uma pasta válida(A pasta não existe)."
     wscript.echo FileLog
      WScript.Quit
    End If
    
    i=0
    IF MyFiles.Count <> 0 Then
     For Each MyFiles in Folder.Files
      NomeFileDeleted = MyFiles.Name
     
      MyFiles.Delete
      if Err.number <> 0 then
       WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if
    
    IF MySubFolders.Count <> 0 Then
    
     For each MyFolder in MySubFolders
    	Dim Pasta, Pasta1, subPasta, ArquivosPasta
    	set Pasta = ObjFSO.GetFolder(MyFolder)		
    	set subPasta = Pasta.SubFolders
    	set ArquivosPasta = Pasta.files	
    	
    	
    	
    	i=0
    	IF ArquivosPasta.Count <> 0 Then
    	 For Each ArquivosPasta in Pasta.Files
    	  NomeFileDeleted = ArquivosPasta.Name
    	 
    	  ArquivosPasta.Delete
    	  if Err.number <> 0 then
    	   WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
    	   Err.Clear
    	   else
    		WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
    		i=i+1
    	  end if
    	  ActionDel = "yes"
    	 Next
    	end if
    	
    	
    	
    				
    	IF subPasta.Count <> 0 Then	
    	WriteLog Path &"valor subPasta "& subPasta.Name		
    		For each Pasta1 in subPasta			
    			NomeFolderDeleted = Pasta1.Name
    			Pasta1.delete
    			
    			if Err.number <> 0 then
    				WriteLog Err.Description&". Erro ao tentar deletar a pasta "& Path &"\"&NomeFolderDeleted
    				Err.Clear
    			else
    				WriteLog Path &"\"&NomeFolderDeleted &" - PASTA deletada em "& now()
    				i=i+1
    			end if			
    			ActionDel = "yes"	
    			
    		Next
    	end if
     Next
    end if
      
    
    if ActionDel = "yes" then
     WriteLog "-------------------------------------FIM---------------------------------TOTAL DE "& i &" OBJETOS DELETADOS---"
    end if
    
    
    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function
    
    Function VerifySizeLog(NameFile)
     Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     Set ObjFileRead = ObjFSO.opentextfile(NameFile, ForReading, True)
     Set Arquivo = ObjFSO.GetFile(NameFile)
     ArquivoSize = Arquivo.size
     'wscript.echo ArquivoSize
     if  ArquivoSize >= 1240000 then
      ObjFileRead.close
      Arquivo.name = "LOG FECHADO EM "& Replace(FormatDateTime(now,2),"/","-")&".txt"
      
     elseif ArquivoSize <= 1000024 then
      FileLog = NameFile
     end if
    
    End Function  
      


    • Editado Alex do Nascimento sexta-feira, 16 de setembro de 2011 15:03 inserção do código
    • Sugerido como Resposta Gustavo R Valle sexta-feira, 16 de setembro de 2011 15:44
    • Marcado como Resposta Valmor Lima sexta-feira, 16 de setembro de 2011 17:30
    sexta-feira, 16 de setembro de 2011 15:01

Todas as Respostas

  • Sim, há scripts que fazem isso.

    Mas porque o diretorio Publico tem pasta de Perfil?

    Porque não cria outro compartilhamento p/ arquivos importantes e deixa somente o publico para ser limpo aos sábados, por exemplo?

     

    Segue modelo de script:

    http://grvalle.com/2011/05/30/script-limpar-diretorio-publico/

     

    Ai é só agendar no agendador de tarefas do Windows.


    Gustavo Valle | http://grvalle.com
    quinta-feira, 15 de setembro de 2011 11:53
  • Gustavo bom dia

    a razão do publico ter a pasta de perfil e justamente devido ao fato de usarmos outros compartilahmentos ( Departamentais ) onde seto permissões de segurança por função "e não por usuário"

    Desta forma mantenho no publico apenas os arquivos sem importância ( e backup ) dos usuários.

    irei testar agora mesmo o script lembrando que devo apagar o "conteúdo" das "subpastas" e não as mesmas.

    obrigado de antemâo pela colaboração.

    quinta-feira, 15 de setembro de 2011 12:06
  • Crie uma estrutura semelhante para validar o script.

    Agora entendi, achei que cada pasta de perfil continha dados importantes....

    Cara, esse script limpa toda pasta "pai", acho que não servir pra você.

     

    Mas dá uma procurada em

    http://gallery.technet.microsoft.com/scriptcenter/site/search?f[0].Type=RootCategory&f[0].Value=storage&f[0].Text=Armazenamento&f[1].Type=SubCategory&f[1].Value=folders&f[1].Text=Pastas


    Gustavo Valle | http://grvalle.com
    quinta-feira, 15 de setembro de 2011 12:11
  • Amigo Alex, a dica do nosso amigo Gustavo ajudou voce a resolver o problema?

    ABraços


    Valmor Lima
    sexta-feira, 16 de setembro de 2011 14:56
  • Infelizmente para esta situação não Valmor,

    mas com a ajuda de um amigo conseguimos desenvolver um outro script aqui:

    ficou bem grande mas com o tempo iremos melhorá-lo, o importante e que esta funcional e o que é melhor ainda o mesmo ainda gera os logs de exclusão de cada subpasta e arquivos deletados


    segue o mesmo caso alguem necessite:

    Option Explicit
    
    
    Dim Path, FileLog, Arquivo, ArquivoSize
    Dim ObjFSO, Folder, MyFiles, MySubFolders, MyFolder 
    Dim ObjFileRead, ObjFileWrite, ObjFileAppending
    Dim NomeFileDeleted, NomeFolderDeleted
    Dim ActionDel, i
    
    On error resume next
    
    Path = "C:\TEMP" 'Pasta Raiz onde for desejado apagar os arquivos e subpastas
    FileLog = "logfile.txt"  'Nome do logfile
    ActionDel = "no"
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    
     
    
    
    Set ObjFSO = CreateObject("Scripting.FileSystemObject")
    
    
    VerifySizeLog FileLog
    Set Folder = ObjFSO.GetFolder(Path)
    Set MyFiles = Folder.files
    Set MySubFolders = Folder.SubFolders
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    'Set ObjFileWrite = ObjFSO.opentextfile(FileLog, ForWriting, True)
     
     
     
    If Not ObjFSO.FolderExists(Path) Then
      WriteLog Path & " - não é uma pasta válida(A pasta não existe)."
     wscript.echo FileLog
      WScript.Quit
    End If
    
    i=0
    IF MyFiles.Count <> 0 Then
     For Each MyFiles in Folder.Files
      NomeFileDeleted = MyFiles.Name
     
      MyFiles.Delete
      if Err.number <> 0 then
       WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if
    
    IF MySubFolders.Count <> 0 Then
    
     For each MyFolder in MySubFolders
    	Dim Pasta, Pasta1, subPasta, ArquivosPasta
    	set Pasta = ObjFSO.GetFolder(MyFolder)		
    	set subPasta = Pasta.SubFolders
    	set ArquivosPasta = Pasta.files	
    	
    	
    	
    	i=0
    	IF ArquivosPasta.Count <> 0 Then
    	 For Each ArquivosPasta in Pasta.Files
    	  NomeFileDeleted = ArquivosPasta.Name
    	 
    	  ArquivosPasta.Delete
    	  if Err.number <> 0 then
    	   WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
    	   Err.Clear
    	   else
    		WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
    		i=i+1
    	  end if
    	  ActionDel = "yes"
    	 Next
    	end if
    	
    	
    	
    				
    	IF subPasta.Count <> 0 Then	
    	WriteLog Path &"valor subPasta "& subPasta.Name		
    		For each Pasta1 in subPasta			
    			NomeFolderDeleted = Pasta1.Name
    			Pasta1.delete
    			
    			if Err.number <> 0 then
    				WriteLog Err.Description&". Erro ao tentar deletar a pasta "& Path &"\"&NomeFolderDeleted
    				Err.Clear
    			else
    				WriteLog Path &"\"&NomeFolderDeleted &" - PASTA deletada em "& now()
    				i=i+1
    			end if			
    			ActionDel = "yes"	
    			
    		Next
    	end if
     Next
    end if
      
    
    if ActionDel = "yes" then
     WriteLog "-------------------------------------FIM---------------------------------TOTAL DE "& i &" OBJETOS DELETADOS---"
    end if
    
    
    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function
    
    Function VerifySizeLog(NameFile)
     Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     Set ObjFileRead = ObjFSO.opentextfile(NameFile, ForReading, True)
     Set Arquivo = ObjFSO.GetFile(NameFile)
     ArquivoSize = Arquivo.size
     'wscript.echo ArquivoSize
     if  ArquivoSize >= 1240000 then
      ObjFileRead.close
      Arquivo.name = "LOG FECHADO EM "& Replace(FormatDateTime(now,2),"/","-")&".txt"
      
     elseif ArquivoSize <= 1000024 then
      FileLog = NameFile
     end if
    
    End Function  
      


    • Editado Alex do Nascimento sexta-feira, 16 de setembro de 2011 15:03 inserção do código
    • Sugerido como Resposta Gustavo R Valle sexta-feira, 16 de setembro de 2011 15:44
    • Marcado como Resposta Valmor Lima sexta-feira, 16 de setembro de 2011 17:30
    sexta-feira, 16 de setembro de 2011 15:01