none
Apagar arquivos antigos RRS feed

  • Pergunta

  • Olá,

    Estou com um problema já vi muitos scripts para rodar e arquivos bat mas nenhum da certo aki.

    Tenho um servidor FTP e nele possuo varios usuarios e tenho que deixar um rotina rodando onde todo dia ele verificar os arquivos antigos e os arquivos com 30 dias de vida serão apagados.

     

    Hoje nosso diretório é d:\FTP\usuarios tenho que ter uma rotina que verifique todos os usuarios na pasta d:\FTP sem apagar as pasta usuarios 'd:\FTP\USUARIOS' somente os arquivos e pastas detro.

     

    Obrigado!!

    segunda-feira, 16 de janeiro de 2012 16:58

Respostas

  •  

    Teste esta forma:

     

    strPasta="D:\FTP\"
    
    set FSo = CreateObject("Scripting.FileSystemObject")
    
    Apagar_Arquivos(strPasta)
    
    
    Sub Apagar_Arquivos(Pasta)
    
    	set folder = FSO.getFolder (Pasta)
    
    
    	'Verifica se tem subpastas
    	if folder.Subfolders.count > 0 then
    		for each SubFolder in folder.Subfolders
    			if ucase(subfolder.path)<>"D:\FTP\EMPRESA" then
    				Apagar_Arquivos SubFolder
    			end if
    		next
    	end if
    
     
    	for each file in folder.files
    		if (dateDiff("d", file.DateLastModified, now) >5) then
    			File.delete
    		end if
    	next 
    
    	if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
    
    		Folder.delete true
    
    	end if
    
    end sub  
    


     

    ----------------------

    Veja que a única modificação em relação ao original é colocar um IF antes da parte que chama a sub novamente.

     


    Fábio de Paula Junior
    • Editado Fábio JrModerator terça-feira, 17 de janeiro de 2012 12:42
    • Sugerido como Resposta Fábio JrModerator terça-feira, 17 de janeiro de 2012 12:48
    • Marcado como Resposta MpR_Pablo terça-feira, 17 de janeiro de 2012 12:57
    terça-feira, 17 de janeiro de 2012 12:40
    Moderador
  • Perfeito, Grande, Supremo Você é Ninja.

     

    Funcionou perfeitamente.

     

    Muito obrigado !!!!

    Criando agora um para mandar um Email dizendo que o usuário 'TESTE' possui arquivos com mais de 2 dias no FTP. :(

     

    Thanks...


    []'s, Maikon Pablo Rodrigues
    • Marcado como Resposta MpR_Pablo terça-feira, 17 de janeiro de 2012 12:57
    terça-feira, 17 de janeiro de 2012 12:47

Todas as Respostas

  • Consegui esse exemplo mas ele exclui a pasta dos usuários também, o que não poderia já que teria que ficar criando todos os dias os cento e poucos Usuários.

     

    strPasta="D:\FTP\"

     

    set FSo = CreateObject("Scripting.FileSystemObject")

     

    Apagar_Arquivos(strPasta)

     

     

     

    Sub Apagar_Arquivos(Pasta)

     

     set folder = FSO.getFolder (Pasta)

     

     

     'Verifica se tem subpastas

     if folder.Subfolders.count > 0 then

      for each SubFolder in folder.Subfolders

       Apagar_Arquivos SubFolder

      next

     end if

     

     

     for each file in folder.files

      if (dateDiff("d", file.DateLastModified, now) >5) then

       File.delete

      end if

     next

     

     

     if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then

      Folder.delete true

     end if

     

    end sub  


    []'s, Maikon Pablo Rodrigues
    segunda-feira, 16 de janeiro de 2012 17:40
  • Retirando o ultimo IF ele não exclui as pastas com arquivos zeros deixando os usuários intactos .

     

    O unico problema que tenho um usuario que não posso fazer essa verificação ou seja os arquivos nele não poderam nunca ser excluido, mas se eu rodar o script ele vai excluir.

     

    Será que tem algum geito de juntar um script que deixe esse usuario EMPRESA intacto sem fazer nenhuma verificação???


    []'s, Maikon Pablo Rodrigues
    segunda-feira, 16 de janeiro de 2012 18:54
  • Altere esta parte do código:

    for each SubFolder in folder.Subfolders
    	if ucase(subfolder.path)<>"D:\FTP\EMPRESA" then
    		Apagar_Arquivos SubFolder
    	end if
    next
    

    Veja que adicionei um IF e a função apagar_arquivos só vai ser chamada se a pasta for diferente de D:\ftp\empresa.

    Coloque o nome da pasta toda em Maiusculas, como eu fiz no exemplo.

     


    Fábio de Paula Junior
    segunda-feira, 16 de janeiro de 2012 23:32
    Moderador
  • Olá Fábio Jr

     

    Alterei a parte:

     

     for each file in folder.files

      if (dateDiff("d", file.DateLastModified, now) >5) then

       File.delete

      end if

     next

    Para a parte que vc citou:

     

    for each SubFolder in folder.Subfolders
    	if ucase(subfolder.path)<>"D:\FTP\EMPRESA" then
    		Apagar_Arquivos SubFolder
    	end if
    next
    
    colocando em MAIÚSCULA
    

    Depois tentei colocar no meio do meu código mas ele continuou excluindo.

     

    Conseguirias me dizer como coloco esse código no meu código?

     


    []'s, Maikon Pablo Rodrigues
    terça-feira, 17 de janeiro de 2012 10:44
  • Acho que você alterou errado.

    Poste o seu código completo,com a alteração.


    Fábio de Paula Junior
    terça-feira, 17 de janeiro de 2012 11:48
    Moderador
  • strPasta="D:\FTP\"

     

    set FSo = CreateObject("Scripting.FileSystemObject")

     

    Apagar_Arquivos(strPasta)

     

     

     

    Sub Apagar_Arquivos(Pasta)

     

     set folder = FSO.getFolder (Pasta)

     

     

     'Verifica se tem subpastas

     if folder.Subfolders.count > 0 then

      for each SubFolder in folder.Subfolders

       Apagar_Arquivos SubFolder

      next

     end if

     

     

    for each SubFolder in folder.Subfolders
    	if ucase(subfolder.path)<>"D:\FTP\EMPRESA" then
    		Apagar_Arquivos SubFolder
    	end if
    next

     

     

     if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then

      Folder.delete true

     end if

     

    end sub  

     

    FICOU ASSIM AGORA, MAS AI ELE NÃO VAI PROCURAR ARQUIVOS COM MAIS DE 5 DIAS.

     

    DESCULPE SOU UM POUCO NOVO NESSA ÁREA DE SCRIPTS TENHO QUE APRENDER MUITO AINDA


    []'s, Maikon Pablo Rodrigues
    terça-feira, 17 de janeiro de 2012 12:34
  •  

    Teste esta forma:

     

    strPasta="D:\FTP\"
    
    set FSo = CreateObject("Scripting.FileSystemObject")
    
    Apagar_Arquivos(strPasta)
    
    
    Sub Apagar_Arquivos(Pasta)
    
    	set folder = FSO.getFolder (Pasta)
    
    
    	'Verifica se tem subpastas
    	if folder.Subfolders.count > 0 then
    		for each SubFolder in folder.Subfolders
    			if ucase(subfolder.path)<>"D:\FTP\EMPRESA" then
    				Apagar_Arquivos SubFolder
    			end if
    		next
    	end if
    
     
    	for each file in folder.files
    		if (dateDiff("d", file.DateLastModified, now) >5) then
    			File.delete
    		end if
    	next 
    
    	if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
    
    		Folder.delete true
    
    	end if
    
    end sub  
    


     

    ----------------------

    Veja que a única modificação em relação ao original é colocar um IF antes da parte que chama a sub novamente.

     


    Fábio de Paula Junior
    • Editado Fábio JrModerator terça-feira, 17 de janeiro de 2012 12:42
    • Sugerido como Resposta Fábio JrModerator terça-feira, 17 de janeiro de 2012 12:48
    • Marcado como Resposta MpR_Pablo terça-feira, 17 de janeiro de 2012 12:57
    terça-feira, 17 de janeiro de 2012 12:40
    Moderador
  • Perfeito, Grande, Supremo Você é Ninja.

     

    Funcionou perfeitamente.

     

    Muito obrigado !!!!

    Criando agora um para mandar um Email dizendo que o usuário 'TESTE' possui arquivos com mais de 2 dias no FTP. :(

     

    Thanks...


    []'s, Maikon Pablo Rodrigues
    • Marcado como Resposta MpR_Pablo terça-feira, 17 de janeiro de 2012 12:57
    terça-feira, 17 de janeiro de 2012 12:47
  • Teria como depois de ele excluir ele gravar um log em .txt de o que foi excluído?
    []'s, Maikon Pablo Rodrigues
    terça-feira, 17 de janeiro de 2012 19:17