Usuário com melhor resposta
Unir scripts que apagam arquivos (Filtrar por nome e data do arquivo)

Pergunta
-
Gabriel,
Poderia adpatar o script abaixo para ter a opção de exclusao de dias.
Exemplo.
Quero deletar tudo dentro das pastas que contenha o nome CONTENCAO a mais de 5 dias.
-----------------------------------------------
On Error Resume Next Dim strPastaRaiz, strArquivos, objPastaRaiz, objSubPastas strPastaRaiz = "D:\TEMP\BACKUP" strArquivos = "\*CONTENCAO*.RAR" Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile(strPastaRaiz & strArquivos), True Set objPastaRaiz = objFSO.GetFolder(strPastaRaiz) Set objSubPastas = objPastaRaiz.SubFolders For Each SubPasta In objSubPastas objFSO.DeleteFile(SubPasta.Path & strArquivos), True Next
-----------------------------------------------
O seus Scritp esta funcionando, so falta excluir o que esta mais de 5 dias nas pastas.
Dentro da estrutura de Pasta, tenho varias pastas com estes arquivos que precisam ser excluidos, isto ja esta correto.
Ja possuo um outro script que faz isto, porem nao sei unir os dois.
Este abaixo exclui tudo em uma pasta com mais de XX dias.
----------------------------------------
strPasta="H:\HSC\BACKUPS\SRVHSC01\DBS" 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.datecreated, now) >30) 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
--------------------
Aguardo retorno
- Dividir Fábio JrModerator segunda-feira, 4 de junho de 2012 20:12 Pergunta iniciada em tópico encerrado
- Editado Fábio JrModerator terça-feira, 5 de junho de 2012 01:38 Formato código
Respostas
-
João,
Usando .VBS dá um pouco de trabalho, serve em PowerShell (.PS1)?
Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | remove-item
Isto é apenas uma linha.
Veja que ele lista apenas os arquivos *contecao*.rar dentro da pasta d:\temp\backup e com mais de 5 dias da data de criação.
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quarta-feira, 6 de junho de 2012 02:25
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 6 de junho de 2012 12:17
Todas as Respostas
-
João,
Usando .VBS dá um pouco de trabalho, serve em PowerShell (.PS1)?
Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | remove-item
Isto é apenas uma linha.
Veja que ele lista apenas os arquivos *contecao*.rar dentro da pasta d:\temp\backup e com mais de 5 dias da data de criação.
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator quarta-feira, 6 de junho de 2012 02:25
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 6 de junho de 2012 12:17
-
-
João,
Roda um pouco diferente do .VBS e .BAT, os arquivos tem a extensão .PS1 e não é simplesmente dar um duplo clique. Se for de um prompt tradicional você tem que utilizar assim:
powershell -file nome_do_script.ps1
De dentro do prompt do powershell você pode executar escrevendo o nome do arquivo, vou adicionar no final um artigo ensinando a agendar um script powershell, pode ser muito útil.
O script que eu havia passado já está completo, você pode testar ele da seguinte forma:
1) Abra o prompt do powershell
2) Execute o comando
Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR
isso vai listar todos os arquivos *contencao*.rar
3) Agora escreva o mesmo comando e adicione pipe "|" mais um comando que vai filtrar os arquivos por data
Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } |
4) Se listar apenas o que vc quer fica faltando apenas apagar então adicione mais um pipe e depois o comando de apagar (remove-item)
Get-ChildItem D:\Temp\Backup -r -include *CONTENCAO*.RAR | where-object {(-not $_.PsIsContainer) -and ($_.creationTime -lt (date).addDays(-5)) } | remove-item
Agora no script vc pode (ou não) quebrar a linha a cada pipe, funciona como se fosse uma unica linha, cada comando vai jogando seu resultado para o comando seguinte.
Ref.:
Use Scheduled Tasks to Run PowerShell Commands on Windows
Fábio de Paula Junior
-
-