none
Script ou bat para deletar arquivos de subpastas comparando data de criação alteração RRS feed

  • 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\

    sexta-feira, 21 de fevereiro de 2014 14:16

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

    https://www.google.com.br/search?q=powershell+delete+old+files&oq=powershell+delete&aqs=chrome.0.69i59j69i57j69i59j0l2j69i60.9807j0j7&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8


    Fábio de Paula Junior

    sexta-feira, 21 de fevereiro de 2014 17:23
    Moderador

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

    https://www.google.com.br/search?q=powershell+delete+old+files&oq=powershell+delete&aqs=chrome.0.69i59j69i57j69i59j0l2j69i60.9807j0j7&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8


    Fábio de Paula Junior

    sexta-feira, 21 de fevereiro de 2014 17:23
    Moderador
  • 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
    sexta-feira, 21 de fevereiro de 2014 18:51