Ir para conteúdo
Fórum Script Brasil
  • 0

SCRIPT para deletar pastas antigas


Nelson Cruz

Pergunta

Pessoal tenho um problema cronico aqui na minha empresa, como temos muitos funcionários e não temos lugar fixo, ficamos com os micros lotados de perfis. Isso faz os micros ficarem lentos na hora de logar.

Por isso resolvi fazer uma script para excluir as pastas com os perfis que já não são modificados a algum tempo, porem não estou conseguindo fazer o script apagar pasta, ele só está apagando arquivos.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Diretorio onde vamos apagar
strPasta = "C:\vários"
'Tipo de arquivo
arrTipos = "doc"
'Ultima modificação
strData = 60


arrTipos = split(arrTipos,";")
If (objFSO.FolderExists(strPasta) = True) Then
   Set Folder = ObjFSO.GetFolder(strPasta)
   Set MyFiles = Folder.files   
      For Each tipo in arrTipos
         For Each MyFiles in Folder.Files
            If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
               objFSO.Deletefile(strPasta & "\" & myfiles.name)
            End If
         Next
      Next
End if


wscript.quit

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Olá...

Só de passagem ;)... já passei por isso e tentei via script MS-DOS...mas a solução é o FSO mesmo...

Bem, utilizando suas variáveis (já que você tem o caminho setado em uma variavel), basta fazer assim:

objFSO.DeleteFolder strPasta, True

Acho que basta colocar onde está a linha: "objFSO.Deletefile(strPasta & "\" & myfiles.name)"

e retire do ciclo a contagem de arquivos...pois não é preciso...o que tiver na pasta vai embora.

Se não der certo, comenta o erro que foi apresentado. sml13.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Olá...

Só de passagem ;)... já passei por isso e tentei via script MS-DOS...mas a solução é o FSO mesmo...

Bem, utilizando suas variáveis (já que você tem o caminho setado em uma variavel), basta fazer assim:

objFSO.DeleteFolder strPasta, True

Acho que basta colocar onde está a linha: "objFSO.Deletefile(strPasta & "\" & myfiles.name)"

e retire do ciclo a contagem de arquivos...pois não é preciso...o que tiver na pasta vai embora.

Se não der certo, comenta o erro que foi apresentado. sml13.gif

Amigo, não retorno nenhum erro, porem não apagou a pasta.

O que acontece é o seguinte, esse script teria que entrar por exemplo no Documents and Settings e apagar os as pastas com usuarios que já não usar a um certo tempo. esse script funciona para apagar arquivos que não são usados a um tempo. porem esse script tem um outro erro, que se eu colocar ele para apagar doc, e tiver dois aquivos antigos com o nome doc, ele só apaga um. Só que isso não é importantente para mim, já que eu quero excluir a pasta inteira.

Link para o comentário
Compartilhar em outros sites

  • 0

Nelson...

Se você não vai precisar "contar" o número de arquivos na pasta, então elimina o código... :ninja:

Vamos ver... :unsure: vamos por parte então... tenta assim:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Diretorio onde vamos apagar
strPasta = "C:\vários"

'Ultima modificação
strData = 60

If (objFSO.FolderExists(strPasta) = True) Then
   Set Folder = ObjFSO.GetFolder(strPasta)
   Set MyFiles = Folder.files     
    If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
      objFSO.DeleteFolder strPasta, True
    End If   
End if

wscript.quit

Comenta o que deu...

Valeu !

Editado por Danleonhart
Link para o comentário
Compartilhar em outros sites

  • 0
Nelson...

Se você não vai precisar "contar" o número de arquivos na pasta, então elimina o código... :ninja:

Vamos ver... :unsure: vamos por parte então... tenta assim:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Diretorio onde vamos apagar
strPasta = "C:\vários"

'Ultima modificação
strData = 60

If (objFSO.FolderExists(strPasta) = True) Then
   Set Folder = ObjFSO.GetFolder(strPasta)
   Set MyFiles = Folder.files     
    If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
      objFSO.DeleteFolder strPasta, True
    End If   
End if

wscript.quit

Comenta o que deu...

Valeu !

Amigo deu esse erro.

C:\Documents and Settings\Nelson Cruz\deletaantigo.vb script: O objeto não dá suporte para a propriedade ou mét

odo: 'MyFiles.name'

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi seu codigo, e mesmo se não tivesse dado erro, ele iria apagar a pasta vários e não as pastas que estáo dentro da pasta varios.

Esse script eu vou usar para apagar os perfis que ficam dentro do documentos and settings, e que eu não sei os nomes das pastas.

Para facilitar todos os perfis começão com a letra P, podemos colocar isso como parametro e mandar ele testar a data das pastas começadas com P e se for antiga o script apaga.

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte...

Eu deixei a parte do script:

Set MyFiles = Folder.files     
    If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then
pois deduzí que é ele que dá a condição de filtrar o que deve e quando ser deletado...pois para excluir a pasta em definitivo (não importando o quanto ou o quê tenha dentro), basta usar a linha:
objFSO.DeleteFolder strPasta, True

então, como não tenho o seu código completo, não tenho como testar...somente chutar ;)

por isso a parte de exclusão que você necessita tá aí...basta só adaptar...que só vai ser possível por você mesmo que tem o código full legal.png

Link para o comentário
Compartilhar em outros sites

  • 0
Eu deixei a parte do script:

Set MyFiles = Folder.files     
    If Right(myfiles.name,3) = tipo And DateDiff("d",myfiles.DateLastModified,now) > strData Then[/code]

pois deduzí que é ele que dá a condição de filtrar o que deve e quando ser deletado...

é, mas nessa hora o q devia ser testado era o .DateLastModified da pasta. Folder.Files é um conjunto de objetos Scripting.File e nem possui essa propriedade (cada arquivo dentro dele sim. você poderia checar com o For Each, como no codigo do primeiro post, mas acho q não é isso o objetivo do tópico).

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...