Usuário com melhor resposta
Script ou bat para deletar arquivos de subpastas comparando data de criação alteração

Pergunta
-
Olá
Tenho a seguinte necessidade:
Tenho uma pasta chamada Scanner e dentro delas há várias subpastas eu preciso realizar o bkp de todas essas pastas na mesma estrutura para um outro local e depois deletar os arquivos das subpastas de origem com mais de 7 dias de criação/alteração. Detalhe não pode ser deletado de forma alguma as subpastas somente o que houver nelas.
Exemplo \\scanner\TI\pasta1\teste.doc, xxx.pps, ti.pdf - deletar apenas os arquivos da pasta TI
Resultado final: \\scanner\TI\
Respostas
-
Copiar os arquivos mantendo a estrutura.
$Pasta_Origem = "C:\temp" $Pasta_Destino = "C:\temp2" $Arquivos = dir $Pasta_Origem -Recurse | ? {!$_.PSIsContainer} #Copia cada arquivo, mantendo estrutura $i=0 foreach($A in $Arquivos){ $i+=1 #Novo Caminho $Destino = $A.DirectoryName.Replace($Pasta_Origem,$Pasta_Destino) #Cria Pasta no destino New-Item -Path $Destino -ItemType Directory | Out-Null #Barra de Progresso, não é o progresso da cópia Write-Progress -activity "Copiando $($A.Name)" -status "Porcentagem: $(($i / $Arquivos.Count) * 100)" -PercentComplete (($i / $Arquivos.Count) * 100) #Copia Copy-Item $A.FullName $Destino } #Apagar Arquivos #Ver Links, adicione o código aqui
Nesse mesmo script você pode adicionar a parte que apaga arquivos com mais de 7 dias, existem vários exemplos desse tipo de script. Caso não encontre um que realize exatamente o que você precise então poste o código que mais se aproxima e diga o que está faltando.
Pesquisa
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator sexta-feira, 21 de fevereiro de 2014 20:15
- Marcado como Resposta Fábio JrModerator sábado, 22 de fevereiro de 2014 21:56
Todas as Respostas
-
Copiar os arquivos mantendo a estrutura.
$Pasta_Origem = "C:\temp" $Pasta_Destino = "C:\temp2" $Arquivos = dir $Pasta_Origem -Recurse | ? {!$_.PSIsContainer} #Copia cada arquivo, mantendo estrutura $i=0 foreach($A in $Arquivos){ $i+=1 #Novo Caminho $Destino = $A.DirectoryName.Replace($Pasta_Origem,$Pasta_Destino) #Cria Pasta no destino New-Item -Path $Destino -ItemType Directory | Out-Null #Barra de Progresso, não é o progresso da cópia Write-Progress -activity "Copiando $($A.Name)" -status "Porcentagem: $(($i / $Arquivos.Count) * 100)" -PercentComplete (($i / $Arquivos.Count) * 100) #Copia Copy-Item $A.FullName $Destino } #Apagar Arquivos #Ver Links, adicione o código aqui
Nesse mesmo script você pode adicionar a parte que apaga arquivos com mais de 7 dias, existem vários exemplos desse tipo de script. Caso não encontre um que realize exatamente o que você precise então poste o código que mais se aproxima e diga o que está faltando.
Pesquisa
Fábio de Paula Junior
- Sugerido como Resposta Fábio JrModerator sexta-feira, 21 de fevereiro de 2014 20:15
- Marcado como Resposta Fábio JrModerator sábado, 22 de fevereiro de 2014 21:56
-
Fábio
Grata pelo código, eu fiz a junção do seu código com o que eu já tinha alterado o que atendeu a minha necessidade 100%. Segue o código completo.
$Pasta_Origem = "F:\Desktop" $Pasta_Destino = "F:\bkp" $Arquivos = dir $Pasta_Origem -Recurse | ? {!$_.PSIsContainer} #Copia cada arquivo, mantendo estrutura $i=0 foreach($A in $Arquivos){ $i+=1 #Novo Caminho $Destino = $A.DirectoryName.Replace($Pasta_Origem,$Pasta_Destino) #Cria Pasta no destino New-Item -Path $Destino -ItemType Directory | Out-Null #Barra de Progresso, não é o progresso da cópia Write-Progress -activity "Copiando $($A.Name)" -status "Porcentagem: $(($i / $Arquivos.Count) * 100)" -PercentComplete (($i / $Arquivos.Count) * 100) #Copia Copy-Item $A.FullName $Destino } #criar diretorio logdeletados - Luiz Henrique New-Item -Path 'F:\logdeletados' -ItemType "directory" #Criar o log dos arquivos deletados $data = Get-Date -Format "ddMMyyyyhhmm" $Nome = "TempDeletado" + $data + ".txt" ls F:\Desktop\ | where {$_.lastwritetime -lt (date).adddays(-7)} >> ("F:\logdeletados\"+$Nome) #Criar a variavel Date para pegar a data atual e setar para até 7 dias $Date = (get-date) - (new-timespan -day 7) #Acessando a unidade de disco $Dir = "F:\Desktop\" #Verificando e deletando os arquivos da pasta Get-ChildItem $Dir -Recurse | where {$_.LastWriteTime -le $Date} Get-ChildItem $Dir -Recurse | where {$_.LastWriteTime -le $Date} | del
Grata
- Editado Fábio JrModerator sexta-feira, 21 de fevereiro de 2014 20:14 Formatação do código