none
Script para apagar arquivos

    Pergunta

  • Boa tarde.

    Aguem sabe se existe a possibilidade de criar um script que apague arquivos de derterminada para periodicamente?

    Quero que apague arquivos gerados de 15 em 15 dias.

    Como posso fazer.?

     

    Grata

    Carla

     

    sexta-feira, 9 de março de 2007 19:34

Respostas

  • A linha a seguir apaga arquivos anteriores a 15 dias, recursivamente.

    dir 'C:\Teste' -recurse | where {$_.creationTime -lt (date).addDays(-15) }  | del

    Esta outra apaga arquivos anteriores a duas horas:

    dir 'C:\Teste' -recurse | where {$_.creationTime -lt (date).addHours(-2) } | del


    []s,





    --
    Vinicius Canto
    MVP Admin Frameworks
    Blog sobre scripting: http://viniciuscanto.blogspot.com
    sexta-feira, 13 de junho de 2008 17:37
    Moderador

Todas as Respostas

  • Carla,

    Tenho um script aqui em formato .bat, mas funciona sem problemas. Nele voce pode definir os arquivos que deseja excluir a partir da ultima modificaçao. Segue abaixo um exemplo:

    Obs.: Esse script utiliza o utilitario ForFiles.exe

     

    @echo off
    REM ///////////////////////////////////////////////////////////
    REM //           Define as variaveis de data         //
    REM ///////////////////////////////////////////////////////////

    @Rem make var nowDay
    FOR /F "TOKENS=1* DELIMS=/" %%A IN ('date/t') DO SET nowDay=%%A

    REM ///////////////////////////////////////////////////////////
    REM //     Lista em log os arquivos encontrados       //
    REM ///////////////////////////////////////////////////////////

    FORFILES /S /p C:\SUA_PASTA\ /d -2 /C "CMD /C echo @FILE @FDATE" > C:\Logs\%nowDay%.log

    REM ///////////////////////////////////////////////////////////
    REM //        Remove os arquivos encontrados       //
    REM ///////////////////////////////////////////////////////////

    :: FORFILES /S /p C:\SUA_PASTA\ /d -2 /c "CMD /C DEL @FILE /Q"
    exit

     

    obs.: O campo -2 significa a quantidade de dias que ele ira verificar no arquivo, nesse caso ele deleta arquivos que nao foram alterados nos ultimos 2 dias.

    abs,

     

    Wagner

     

    sexta-feira, 9 de março de 2007 20:04
  • Ola Carla,

    Tente este.

    set FSo = CreateObject("Scripting.FileSystemObject")
    set folder = FSO.getFolder ("C:\Teste\")   
    for each file in folder.files
    if (dateDiff("d", file.datecreated, now) >15) then
    File.delete
    end if
    next

    Abraços,

    Roney

    sexta-feira, 9 de março de 2007 20:28
  • e se eu quisesse converter esses 15 dias em duas horas, eu quero esse script soh q apague os arquivos de duas em duas horas. se alguem souber me ajude!!!
    abraço
    WILL

    quinta-feira, 12 de junho de 2008 18:22
  • A linha a seguir apaga arquivos anteriores a 15 dias, recursivamente.

    dir 'C:\Teste' -recurse | where {$_.creationTime -lt (date).addDays(-15) }  | del

    Esta outra apaga arquivos anteriores a duas horas:

    dir 'C:\Teste' -recurse | where {$_.creationTime -lt (date).addHours(-2) } | del


    []s,





    --
    Vinicius Canto
    MVP Admin Frameworks
    Blog sobre scripting: http://viniciuscanto.blogspot.com
    sexta-feira, 13 de junho de 2008 17:37
    Moderador
  • Vinícius,

     

    Desculpe a pergunta, pois estou começando a utilizar scripts agora.

     

    Essas duas linhas que você informou entrariam num .vbs ou rodariam diretamente numa .bat mesmo?

    terça-feira, 1 de julho de 2008 14:27
  • Roney,

     

    Saberia me informar como faria para deletar também pastas?

    Testei o script numa pasta "C:Teste" que possuia alguns arquivos e alguns diretorios, os arquivos foram apagados sem problemas mais os arquivos que estão nos sub-diretórios ele nem checa.

     

    Abraços.

    terça-feira, 1 de julho de 2008 14:32
  • Tiago,

     

     

    Esse é o script que acabei de fazer aq para empresa onde trabalho. O que irei fazer é coloca-lo nas tarefas agendadas do server 2003 e programar para que seja executado toda sexta-feira após o expediente. Coloquei para criar um log para registra os arquivos deletados e pastas e erros que ocorrerem tambem.

     

     

     

    'Script Deletando arquivos e subpasta e gerando um logfile.
    'Por Leonardo Couto Conrado.

    Option Explicit


    Dim Path, FileLog, Arquivo, ArquivoSize
    Dim ObjFSO, Folder, MyFiles, MySubFolders, MyFolder
    Dim ObjFileRead, ObjFileWrite, ObjFileAppending
    Dim NomeFileDeleted, NomeFolderDeleted
    Dim ActionDel, i

    On error resume next

    Path = "C:\driver" 'Pasta Raiz onde for desejado apagar os arquivos e subpastas
    FileLog = "logfile.txt"  'Nome do logfile
    ActionDel = "no"
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

     


    Set ObjFSO = CreateObject("Scripting.FileSystemObject")


    VerifySizeLog FileLog
    Set Folder = ObjFSO.GetFolder(Path)
    Set MyFiles = Folder.files
    Set MySubFolders = Folder.SubFolders
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    'Set ObjFileWrite = ObjFSO.opentextfile(FileLog, ForWriting, True)
     
     
     
    If Not ObjFSO.FolderExists(Path) Then
      WriteLog Path & " - não é uma pasta válida(A pasta não existe)."
     wscript.echo FileLog
      WScript.Quit
    End If

    i=0
    IF MyFiles.Count <> 0 Then
     For Each MyFiles in Folder.Files
      NomeFileDeleted = MyFiles.Name
     
      MyFiles.Delete
      if Err.number <> 0 then
       WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if

    IF MySubFolders.Count <> 0 Then
     For each MyFolder in MySubFolders
      NomeFolderDeleted = MyFolder.Name
      MyFolder.delete
      
      if Err.number <> 0 then
       WriteLog Err.Description&". Erro ao tentar deletar a pasta "& Path &"\"&NomeFolderDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFolderDeleted &" - PASTA deletada em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if
      

    if ActionDel = "yes" then
     WriteLog "-------------------------------------FIM---------------------------------TOTAL DE "& i &" OBJETOS DELETADOS---"
    end if


    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

    Function VerifySizeLog(NameFile)
     Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     Set ObjFileRead = ObjFSO.opentextfile(NameFile, ForReading, True)
     Set Arquivo = ObjFSO.GetFile(NameFile)
     ArquivoSize = Arquivo.size
     'wscript.echo ArquivoSize
     if  ArquivoSize >= 1240000 then
      ObjFileRead.close
      Arquivo.name = "LOG FECHADO EM "& Replace(FormatDateTime(now,2),"/","-")&".txt"
      
     elseif ArquivoSize <= 1000024 then
      FileLog = NameFile
     end if

    End Function  
      
      
      
      
      
      
      
      
      
      
      
      

     

    • Sugerido como Resposta RCirino sábado, 19 de maio de 2012 18:56
    terça-feira, 1 de julho de 2008 20:01
  • Leonardo,

     

    O script funcionou tranquilo, mais na verdade eu precisava antes de deletar checar a data de criação de do arquivo e se for maior que 2 dias então apagar.

     

    Tentei de diversas formas incluir essa verificação mais não consegui, ele sempre apaga tudo indenpendente da data de criação, será que você ou alguém saberia me ajudar.

    terça-feira, 1 de julho de 2008 21:18
  • Tiago,

     

     

    Esse script abaixo é o ideal para vc é realmente o que está precisando:

     

    - Para usa-lo por exemplo vc pode salvar na unidade" C:" e executa-lo pelo "iniciar >> Executar" colocando a seguinte linha de comando:

     

    - c:\DelOldFiles.vbs "c:\temp" 7 >> Aqui vc esta passando a localização do script(c:\DelOldFiles.vbs), depois a pasta que deseja verificar e apagar os arquivos com datas de modificação de 7 dias atras("c:\temp") e por ultimo especifica a quantidade numero de dias para a data de modficação(7). Arquivos com 7 dias de modificação contidos na pasta temp serão deletados.

     

    '-----------------------------------------------------------------------------------------
    'DelOldFiles.vbs - 4/22/2000
    '
    'Purpose: Deletes files and folders older than a given number of days (based on Last
    '   Modified Date) from a specified folder and ALL of its subdirectories.
    '
    'Prerequisites: Get WSH 2.0 at
    '  http://msdn.microsoft.com/scripting/default.htm?/scripting/windowshost/
    '  You should also run this with CSCRIPT.EXE, not wscript.exe.
    '
    'Syntax: DelOldFiles.vbs &lt;Folder&gt; &lt;no_days_old&gt;
    '
    'Example: DelOldFiles.vbs "c:\temp" 7
    '         This will delete all files in c:\temp and its subdirectories that are 7 days old
    '
    'Notes: You will have to change the logfile path and name so that you can keep track of
    ' what was deleted. You can also comment out the delete statements (there are two
    '       of them) indicated by comments below to generate the logfile without actually
    '       deleting anything so you can make sure nothing important is being deleted.
    '
    'IMPORTANT: This script deletes files PERMANENTLY so make sure you know what you're doing.
    '
    'Copyright: Steve Seguis
    '           scriptmaster@scripthorizon.com
    '           www.scripthorizon.com
    '-----------------------------------------------------------------------------------------
    '=== Force declaration of ALL variables (variants)
    Option Explicit

    '=== Variables declaration required because of Option Explicit
    Dim fso
    Dim oArgs 
    Dim MyRootFolder
    Dim fsOut
    Dim logfile
    Dim outputString

    '=== CHANGE this to the path and name of the log file this script will output to.
    logfile = "DeletedFiles.log"

    '=== Constant Required for OpenTextFile function
    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8

    '=== Get the command line arguments
    Set oArgs = Wscript.Arguments
    If oArgs.Count < 2 Then
     Wscript.Echo "USAGE: DelOldFiles " & "&lt;Folder&gt;" & " &lt;no_days_old&gt;"
     Wscript.Echo ""
     WScript.Echo "Example: DelOldFiles.vbs c:\temp 7"
     WScript.Echo "This will delete all files in c:\temp and its subdirectories"
     WScript.Echo "that are over 7 days old."
     Wscript.Quit 1
    End If

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyRootFolder = fso.GetFolder(oArgs(0))

    on error resume next 'fabio 21/05/2007

    '===First make sure if the folder exists
    IF NOT fso.FolderExists(MyRootFolder) Then
     fsOut.WriteLine oArgs(0) & "is not a valid Folder"
     WScript.Quit 1
    End If

    '=== Next make sure the third parameter is really a number
    If IsNumeric(oArgs(1)) Then
     If CInt(oArgs(1)) >= 0 Then
      '=== Get logfile object ready for appending
      Set fsOut = fso.OpenTextFile(logfile, ForAppending, True)
      fsOut.WriteLine now
      fsOut.WriteLine "Arquivo Ultima Modificação"
      '=== Call DeleteOldFiles on the current folder
      DeleteOldFiles MyRootFolder, oArgs(1)
     Else
      fsOut.WriteLine "The Second Parameter must a positive number"
      WScript.Quit 1
     End If
    Else
     fsOut.WriteLine "The Second Parameter must a positive number"
     WScript.Quit 1
    End If

    '=== Close logfile and quit
    fsOut.Close
    'WScript.Echo "Script Complete!"
    WScript.Quit 0


    '------------------------------------------------------------------------------------------
    'DeleteOldFiles(Folder,noDays)
    '
    'Purpose: Deletes files and subfolders in Folder that are noDays old.
    '------------------------------------------------------------------------------------------
    Sub DeleteOldFiles(Folder,noDays)
       '=== Varibles with local scope as we will this sub procedure recursively
       Dim Datedifference
       Dim MySubFolders
       Dim MyFiles
       Dim MyFile
       Dim MyFolder

       '=== Get the collection of Folders in this folder
       Set MySubFolders = Folder.SubFolders 

       '=== Get the collection of Files in this folder
       Set MyFiles = Folder.files

       '=== If there are subfolders, let process them first.
       IF MySubFolders.Count <> 0 Then
     For each MyFolder in MySubFolders
      DeleteOldFiles MyFolder, noDays
      'Se a pasta estiver vazia delete
      if Myfolder.files.count + Myfolder.SubFolders.count = 0 then
       MyFolder.Delete
      end if
     Next
       End If

       '=== If this folder isn't emtpy, process each file to see if they are older than
       '    the maximum age limit (noDays).
       IF MyFiles.Count <> 0 Then
     For Each MyFile in MyFiles
      '=== Find out how old the file is compared to current date
      Datedifference = DateDiff("D",MyFile.DateLastModified,Date)
      IF (Datedifference >= CInt(noDays)) Then
       '=== This file is old, delete and add entry to logfile
       outputString = MyFile.path & vbtab & MyFile.DateLastModified
       'WScript.Echo outputString
       fsOut.WriteLine outputString
       '=== If you just want to do a dry run of this script, comment out
       '    the next line to prevent the file from being deleted. The true
       '    after the delete statement is necessary to force delete
       MyFile.delete true
      Else
       'Wscript.Echo MyFile.path & " is OK!"
      End If
            Next
       End If

       '=== If this folder is emtpy, meaning no subfolders or files, check if this folder
       '    is older than maximum age limit and delete accordingly
       If MySubFolders.Count = 0 And MyFiles.Count = 0 Then
     Datedifference = DateDiff("D",Folder.DateLastModified,Date)
     IF (Datedifference > CInt(noDays)) Then
      '=== This Folder is old, delete and add entry to logfile
      outputString = Folder.path & vbtab & Folder.DateLastModified
      'WScript.Echo outputString
      fsOut.WriteLine outputString
      '=== If you just want to do a dry run of this script, comment out
      '    the next line to prevent the file from being deleted. The true
      '    after the delete statement is necessary to force delete
      Folder.delete true
      Exit Sub
     Else
      'Wscript.Echo Folder.path & " is OK!"
     End If
       End If

    End Sub
    '------------------------------------------------------------------------------------------
    'End of DeleteOldFiles
    '------------------------------------------------------------------------------------------

    quarta-feira, 2 de julho de 2008 15:51
  • Leonardo,

     

    Show de bola apenas alterei o parâmetro "DateLastModified" para "DateCreated" porque eu vou rodar esse script numa área de transferência (troca de arquivos) onde os mesmos devem permanecer por no máximo 48 horas após a criação.

     

    Só tem uma única observação, o script apaga também o diretório raiz, por exemplo, se eu rodar no "c:\temp" e forem apagados todos os diretórios e arquivos abaixo dele, ele também é apagado e nesse caso gostaria de mantê-lo.

    quarta-feira, 2 de julho de 2008 17:18
  •  

    Tiago,

     

     

    Posta o script como ficou depois da modificação que vc fez testei o de cima e ele não deleta a pasta raiz (A qual é passada por argumento ao scritpt).

     

     

    quarta-feira, 2 de julho de 2008 19:38
  • Leonardo,

     

    Segue abaixo o script que estou executanto, porém ele só apaga o diretório raiz quando não sobra nenhum arquivo ou diretório abaixo do raiz.

     

    ''-----------------------------------------------------------------------------------------
    'DelOldFiles.vbs - 4/22/2000
    '
    'Purpose: Deletes files and folders older than a given number of days (based on Last
    '   Modified Date) from a specified folder and ALL of its subdirectories.
    '
    'Prerequisites: Get WSH 2.0 at
    http://msdn.microsoft.com/scripting/default.htm?/scripting/windowshost/
    '  You should also run this with CSCRIPT.EXE, not wscript.exe.
    '
    'Syntax: DelOldFiles.vbs &lt;Folder&gt; &lt;no_days_old&gt;
    '
    'Example: DelOldFiles.vbs "c:\temp" 7
    '         This will delete all files in c:\temp and its subdirectories that are 7 days old
    '
    'Notes: You will have to change the logfile path and name so that you can keep track of
    ' what was deleted. You can also comment out the delete statements (there are two
    '       of them) indicated by comments below to generate the logfile without actually
    '       deleting anything so you can make sure nothing important is being deleted.
    '
    'IMPORTANT: This script deletes files PERMANENTLY so make sure you know what you're doing.
    '
    'Copyright: Steve Seguis
    '           scriptmaster@scripthorizon.com
    '           www.scripthorizon.com
    '-----------------------------------------------------------------------------------------
    '=== Force declaration of ALL variables (variants)
    Option Explicit

    '=== Variables declaration required because of Option Explicit
    Dim fso
    Dim oArgs 
    Dim MyRootFolder
    Dim fsOut
    Dim logfile
    Dim outputString

    '=== CHANGE this to the path and name of the log file this script will output to.
    logfile = "DeletedFiles.log"

    '=== Constant Required for OpenTextFile function
    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8

    '=== Get the command line arguments
    Set oArgs = Wscript.Arguments
    If oArgs.Count < 2 Then
     Wscript.Echo "USAGE: DelOldFiles " & "&lt;Folder&gt;" & " &lt;no_days_old&gt;"
     Wscript.Echo ""
     WScript.Echo "Example: DelOldFiles.vbs c:\temp 7"
     WScript.Echo "This will delete all files in c:\temp and its subdirectories"
     WScript.Echo "that are over 7 days old."
     Wscript.Quit 1
    End If

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyRootFolder = fso.GetFolder(oArgs(0))

    on error resume next 'fabio 21/05/2007

    '===First make sure if the folder exists
    IF NOT fso.FolderExists(MyRootFolder) Then
     fsOut.WriteLine oArgs(0) & "is not a valid Folder"
     WScript.Quit 1
    End If

    '=== Next make sure the third parameter is really a number
    If IsNumeric(oArgs(1)) Then
     If CInt(oArgs(1)) >= 0 Then
      '=== Get logfile object ready for appending
      Set fsOut = fso.OpenTextFile(logfile, ForAppending, True)
      fsOut.WriteLine now
      fsOut.WriteLine "Arquivo Ultima Modificação"
      '=== Call DeleteOldFiles on the current folder
      DeleteOldFiles MyRootFolder, oArgs(1)
     Else
      fsOut.WriteLine "The Second Parameter must a positive number"
      WScript.Quit 1
     End If
    Else
     fsOut.WriteLine "The Second Parameter must a positive number"
     WScript.Quit 1
    End If

    '=== Close logfile and quit
    fsOut.Close
    'WScript.Echo "Script Complete!"
    WScript.Quit 0


    '------------------------------------------------------------------------------------------
    'DeleteOldFiles(Folder,noDays)
    '
    'Purpose: Deletes files and subfolders in Folder that are noDays old.
    '------------------------------------------------------------------------------------------
    Sub DeleteOldFiles(Folder,noDays)
       '=== Varibles with local scope as we will this sub procedure recursively
       Dim Datedifference
       Dim MySubFolders
       Dim MyFiles
       Dim MyFile
       Dim MyFolder

       '=== Get the collection of Folders in this folder
       Set MySubFolders = Folder.SubFolders 

       '=== Get the collection of Files in this folder
       Set MyFiles = Folder.files

       '=== If there are subfolders, let process them first.
       IF MySubFolders.Count <> 0 Then
     For each MyFolder in MySubFolders
      DeleteOldFiles MyFolder, noDays
      'Se a pasta estiver vazia delete
      if Myfolder.files.count + Myfolder.SubFolders.count = 0 then
       MyFolder.Delete
      end if
     Next
       End If

       '=== If this folder isn't emtpy, process each file to see if they are older than
       '    the maximum age limit (noDays).
       IF MyFiles.Count <> 0 Then
     For Each MyFile in MyFiles
      '=== Find out how old the file is compared to current date
      Datedifference = DateDiff("D",MyFile.DateCreated,Date)
      IF (Datedifference >= CInt(noDays)) Then
       '=== This file is old, delete and add entry to logfile
       outputString = MyFile.path & vbtab & MyFile.DateCreated
       'WScript.Echo outputString
       fsOut.WriteLine outputString
       '=== If you just want to do a dry run of this script, comment out
       '    the next line to prevent the file from being deleted. The true
       '    after the delete statement is necessary to force delete
       MyFile.delete true
      Else
       'Wscript.Echo MyFile.path & " is OK!"
      End If
            Next
       End If

       '=== If this folder is emtpy, meaning no subfolders or files, check if this folder
       '    is older than maximum age limit and delete accordingly
       If MySubFolders.Count = 0 And MyFiles.Count = 0 Then
     Datedifference = DateDiff("D",Folder.DateCreated,Date)
     IF (Datedifference > CInt(noDays)) Then
      '=== This Folder is old, delete and add entry to logfile
      outputString = Folder.path & vbtab & Folder.DateCreated
      'WScript.Echo outputString
      fsOut.WriteLine outputString
      '=== If you just want to do a dry run of this script, comment out
      '    the next line to prevent the file from being deleted. The true
      '    after the delete statement is necessary to force delete
      Folder.delete true
      Exit Sub
     Else
      'Wscript.Echo Folder.path & " is OK!"
     End If
       End If

    End Sub
    '------------------------------------------------------------------------------------------
    'End of DeleteOldFiles
    '------------------------------------------------------------------------------------------

     

    quarta-feira, 2 de julho de 2008 20:50
  • Tiago,

     

     

    É testei aqui e tá funcionando numa boa eu não sei o que tá acontecendo ai coloco as pastas e arquivos ele deleta todos porem conserva a pasta raiz. Eu tou usando ele no executar da seguinte forma:

     

    c:\deloldfiles.vbs "c:\driver" 5

    quarta-feira, 2 de julho de 2008 21:33
  • Nem um nem outro, Tiago. As linhas que eu coloquei são executadas no Windows PowerShell, tanto na linha de comando dele quanto em um script .PS1.


    []s,

    Vinicius Canto
    MVP Windows Server - Admin Frameworks
    Blog sobre scripting: http://viniciuscanto.blogspot.com

    sexta-feira, 4 de julho de 2008 12:16
    Moderador
  • Gente, esse script e muito bom, funciona mesmo, mas como eu n entendo nada de script em vb, ou bat, vo perguntar pra vcs, tem como fazer assim, ele so efetuar essa operacao, ou seja apagar os arquivos ateriores a 7 dias caso ja exista 7 arquivos na determinada pasta

     

     

    Eu queria na verdade que fosse assim, quando existir 7 arquivos em uma determinada pasta, ele excluisse a mais antiga.

     

    Alguem poderia me dizer como fazer isso

     

    quinta-feira, 17 de julho de 2008 12:13
  • Leonardo,

     

    Tem como ele verificar a extensão do arquivo, por exemplo, onde eu trabalho, quero excluir os arquivos .bak cuja data de modificação seja anterior a 15 dias, isso em uma pasta que existem arquivos do CAD que não podem ser apagados, por isso teria que ser só os .bak.

     

    Obrigado.

    terça-feira, 9 de setembro de 2008 00:22
  • Tiago,

     

     

    Esse script abaixo é o ideal para vc é realmente o que está precisando:

     

    - Para usa-lo por exemplo vc pode salvar na unidade" C:" e executa-lo pelo "iniciar >> Executar" colocando a seguinte linha de comando:

     

    - c:\DelOldFiles.vbs "c:\temp" 7 >> Aqui vc esta passando a localização do script(c:\DelOldFiles.vbs), depois a pasta que deseja verificar e apagar os arquivos com datas de modificação de 7 dias atras("c:\temp") e por ultimo especifica a quantidade numero de dias para a data de modficação(7). Arquivos com 7 dias de modificação contidos na pasta temp serão deletados.

     

    '-----------------------------------------------------------------------------------------
    'DelOldFiles.vbs - 4/22/2000
    '
    'Purpose: Deletes files and folders older than a given number of days (based on Last
    '   Modified Date) from a specified folder and ALL of its subdirectories.
    '
    'Prerequisites: Get WSH 2.0 at
    '  http://msdn.microsoft.com/scripting/default.htm?/scripting/windowshost/
    '  You should also run this with CSCRIPT.EXE, not wscript.exe.
    '
    'Syntax: DelOldFiles.vbs &lt;Folder&gt; &lt;no_days_old&gt;
    '
    'Example: DelOldFiles.vbs "c:\temp" 7
    '         This will delete all files in c:\temp and its subdirectories that are 7 days old
    '
    'Notes: You will have to change the logfile path and name so that you can keep track of
    ' what was deleted. You can also comment out the delete statements (there are two
    '       of them) indicated by comments below to generate the logfile without actually
    '       deleting anything so you can make sure nothing important is being deleted.
    '
    'IMPORTANT: This script deletes files PERMANENTLY so make sure you know what you're doing.
    '
    'Copyright: Steve Seguis
    '           scriptmaster@scripthorizon.com
    '           www.scripthorizon.com
    '-----------------------------------------------------------------------------------------
    '=== Force declaration of ALL variables (variants)
    Option Explicit

    '=== Variables declaration required because of Option Explicit
    Dim fso
    Dim oArgs 
    Dim MyRootFolder
    Dim fsOut
    Dim logfile
    Dim outputString

    '=== CHANGE this to the path and name of the log file this script will output to.
    logfile = "DeletedFiles.log"

    '=== Constant Required for OpenTextFile function
    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8

    '=== Get the command line arguments
    Set oArgs = Wscript.Arguments
    If oArgs.Count < 2 Then
     Wscript.Echo "USAGE: DelOldFiles " & "&lt;Folder&gt;" & " &lt;no_days_old&gt;"
     Wscript.Echo ""
     WScript.Echo "Example: DelOldFiles.vbs c:\temp 7"
     WScript.Echo "This will delete all files in c:\temp and its subdirectories"
     WScript.Echo "that are over 7 days old."
     Wscript.Quit 1
    End If

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyRootFolder = fso.GetFolder(oArgs(0))

    on error resume next 'fabio 21/05/2007

    '===First make sure if the folder exists
    IF NOT fso.FolderExists(MyRootFolder) Then
     fsOut.WriteLine oArgs(0) & "is not a valid Folder"
     WScript.Quit 1
    End If

    '=== Next make sure the third parameter is really a number
    If IsNumeric(oArgs(1)) Then
     If CInt(oArgs(1)) >= 0 Then
      '=== Get logfile object ready for appending
      Set fsOut = fso.OpenTextFile(logfile, ForAppending, True)
      fsOut.WriteLine now
      fsOut.WriteLine "Arquivo Ultima Modificação"
      '=== Call DeleteOldFiles on the current folder
      DeleteOldFiles MyRootFolder, oArgs(1)
     Else
      fsOut.WriteLine "The Second Parameter must a positive number"
      WScript.Quit 1
     End If
    Else
     fsOut.WriteLine "The Second Parameter must a positive number"
     WScript.Quit 1
    End If

    '=== Close logfile and quit
    fsOut.Close
    'WScript.Echo "Script Complete!"
    WScript.Quit 0


    '------------------------------------------------------------------------------------------
    'DeleteOldFiles(Folder,noDays)
    '
    'Purpose: Deletes files and subfolders in Folder that are noDays old.
    '------------------------------------------------------------------------------------------
    Sub DeleteOldFiles(Folder,noDays)
       '=== Varibles with local scope as we will this sub procedure recursively
       Dim Datedifference
       Dim MySubFolders
       Dim MyFiles
       Dim MyFile
       Dim MyFolder

       '=== Get the collection of Folders in this folder
       Set MySubFolders = Folder.SubFolders 

       '=== Get the collection of Files in this folder
       Set MyFiles = Folder.files

       '=== If there are subfolders, let process them first.
       IF MySubFolders.Count <> 0 Then
     For each MyFolder in MySubFolders
      DeleteOldFiles MyFolder, noDays
      'Se a pasta estiver vazia delete
      if Myfolder.files.count + Myfolder.SubFolders.count = 0 then
       MyFolder.Delete
      end if
     Next
       End If

       '=== If this folder isn't emtpy, process each file to see if they are older than
       '    the maximum age limit (noDays).
       IF MyFiles.Count <> 0 Then
     For Each MyFile in MyFiles
      '=== Find out how old the file is compared to current date
      Datedifference = DateDiff("D",MyFile.DateLastModified,Date)
      IF (Datedifference >= CInt(noDays)) Then
       '=== This file is old, delete and add entry to logfile
       outputString = MyFile.path & vbtab & MyFile.DateLastModified
       'WScript.Echo outputString
       fsOut.WriteLine outputString
       '=== If you just want to do a dry run of this script, comment out
       '    the next line to prevent the file from being deleted. The true
       '    after the delete statement is necessary to force delete
       MyFile.delete true
      Else
       'Wscript.Echo MyFile.path & " is OK!"
      End If
            Next
       End If

       '=== If this folder is emtpy, meaning no subfolders or files, check if this folder
       '    is older than maximum age limit and delete accordingly
       If MySubFolders.Count = 0 And MyFiles.Count = 0 Then
     Datedifference = DateDiff("D",Folder.DateLastModified,Date)
     IF (Datedifference > CInt(noDays)) Then
      '=== This Folder is old, delete and add entry to logfile
      outputString = Folder.path & vbtab & Folder.DateLastModified
      'WScript.Echo outputString
      fsOut.WriteLine outputString
      '=== If you just want to do a dry run of this script, comment out
      '    the next line to prevent the file from being deleted. The true
      '    after the delete statement is necessary to force delete
      Folder.delete true
      Exit Sub
     Else
      'Wscript.Echo Folder.path & " is OK!"
     End If
       End If

    End Sub
    '------------------------------------------------------------------------------------------
    'End of DeleteOldFiles
    '------------------------------------------------------------------------------------------


    Olá Leonardo,

    Usei este script, muito bom mas devo estar fazendo algo errado, pois ele não está verificando se nos subdiretórios.

    Sabes se tenho que alterar algo?

    tenho um compartilhamento para usuário e queria excluir todo conteudo que não tivesse modificação por mais de um ano

    Usei da seguinte forma: local do script\deloldfiles.vbs "d:\dados" 365

    é isso?

    segunda-feira, 28 de fevereiro de 2011 18:01
  • Prezado Leonardo Couto C,

    Eu estive procurando por scripts para deletar arquivos e achei o sei muito bom para o meu caso, só que tenho um problema:

    Tenho uma pasta, USUÁRIOS, e dentro desta pastas as pastas de "N" Usuários, se eu mudo a linha Path = "C:\driver" e adiciono o caminho da pasta do usuário, digamos, B:\suporte\usuários\mario lima ele deleta os arquivos dentro desta pasta numa boa, e me gera o log o que é fundamental para mim, mas empaquei na seguinte questão:

    como deletar o conteudo dos outros usuários?

    pode me ajudar???

    segunda-feira, 21 de maio de 2012 14:39
  • Tiago,

     

     

    Esse é o script que acabei de fazer aq para empresa onde trabalho. O que irei fazer é coloca-lo nas tarefas agendadas do server 2003 e programar para que seja executado toda sexta-feira após o expediente. Coloquei para criar um log para registra os arquivos deletados e pastas e erros que ocorrerem tambem.

     

     

     

    'Script Deletando arquivos e subpasta e gerando um logfile.
    'Por Leonardo Couto Conrado.

    Option Explicit


    Dim Path, FileLog, Arquivo, ArquivoSize
    Dim ObjFSO, Folder, MyFiles, MySubFolders, MyFolder
    Dim ObjFileRead, ObjFileWrite, ObjFileAppending
    Dim NomeFileDeleted, NomeFolderDeleted
    Dim ActionDel, i

    On error resume next

    Path = "C:\driver" 'Pasta Raiz onde for desejado apagar os arquivos e subpastas
    FileLog = "logfile.txt"  'Nome do logfile
    ActionDel = "no"
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

     


    Set ObjFSO = CreateObject("Scripting.FileSystemObject")


    VerifySizeLog FileLog
    Set Folder = ObjFSO.GetFolder(Path)
    Set MyFiles = Folder.files
    Set MySubFolders = Folder.SubFolders
    Set ObjFileRead = ObjFSO.opentextfile(FileLog, ForReading, True)
    Set ObjFileAppending = ObjFSO.opentextfile(FileLog, ForAppending, True)
    'Set ObjFileWrite = ObjFSO.opentextfile(FileLog, ForWriting, True)
     
     
     
    If Not ObjFSO.FolderExists(Path) Then
      WriteLog Path & " - não é uma pasta válida(A pasta não existe)."
     wscript.echo FileLog
      WScript.Quit
    End If

    i=0
    IF MyFiles.Count <> 0 Then
     For Each MyFiles in Folder.Files
      NomeFileDeleted = MyFiles.Name
     
      MyFiles.Delete
      if Err.number <> 0 then
       WriteLog Err.Description&". !!! Erro ao tentar deletar o arquivo "& Path &"\"&NomeFileDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFileDeleted &" - Arquivo deletado em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if

    IF MySubFolders.Count <> 0 Then
     For each MyFolder in MySubFolders
      NomeFolderDeleted = MyFolder.Name
      MyFolder.delete
      
      if Err.number <> 0 then
       WriteLog Err.Description&". Erro ao tentar deletar a pasta "& Path &"\"&NomeFolderDeleted
       Err.Clear
       else
        WriteLog Path &"\"&NomeFolderDeleted &" - PASTA deletada em "& now()
        i=i+1
      end if
      ActionDel = "yes"
     Next
    end if
      

    if ActionDel = "yes" then
     WriteLog "-------------------------------------FIM---------------------------------TOTAL DE "& i &" OBJETOS DELETADOS---"
    end if


    Function WriteLog (Text)
     ObjFileAppending.WriteLine Text
    End Function

    Function VerifySizeLog(NameFile)
     Set ObjFSO = CreateObject("Scripting.FileSystemObject")
     Set ObjFileRead = ObjFSO.opentextfile(NameFile, ForReading, True)
     Set Arquivo = ObjFSO.GetFile(NameFile)
     ArquivoSize = Arquivo.size
     'wscript.echo ArquivoSize
     if  ArquivoSize >= 1240000 then
      ObjFileRead.close
      Arquivo.name = "LOG FECHADO EM "& Replace(FormatDateTime(now,2),"/","-")&".txt"
      
     elseif ArquivoSize <= 1000024 then
      FileLog = NameFile
     end if

    End Function  
      
      
      
      
      
      
      
      
      
      
      
      

     

    Eu estive procurando por scripts para deletar arquivos e achei o sei muito bom para o meu caso, só que tenho um problema:

    Tenho uma pasta, USUÁRIOS, e dentro desta pastas as pastas de "N" Usuários, se eu mudo a linha Path = "C:\driver" e adiciono o caminho da pasta do usuário, digamos, B:\suporte\usuários\mario lima ele deleta os arquivos dentro desta pasta numa boa, e me gera o log o que é fundamental para mim, mas empaquei na seguinte questão:

    como deletar o conteudo dos outros usuários?

    pode me ajudar???


    segunda-feira, 21 de maio de 2012 17:28