none
Script para deletar arquivos antigos RRS feed

  • Pergunta

  • Boa noite.

     

    Pessoal eu achei um script assim que deleta arquivos antigos:

    Dim fso, f, f1, fc
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFolder("c:\teste")
    Set fc = f.Files
    
    For Each f1 in fc
    	If DateDiff("d", f1.DateLastModified, Now) > 7 Then
    		f1.Delete True
    	End If
    Next
    

    Porem o problema é que esse script só apaga coisa de uma pasta só.

    Eu não sei mto bem programar em vbs., ñ entendi mto bem o que o script faz.

     

    Preciso de um script assim:

    Pastas que tenho que deletar algo:

    1) c:\Pasta1

    2) c:\Pasta2

    3) c:\Pasta3\Pasta3

    4) c:\Pasta4

    5) c:\Pasta5

     

    Em 1 só vou deletar arquivos *.tmp com mais que 10 dias

    Em 2 vou deletar tudo (inclusive aquivos de hj) e arquivos *.txt

    Em 3 vou deletar tudo, todos os tipos de arquivo e com mais de 20 dias.

    Em 4 e 5, vou deletar tudo que for *.txt e *.doc, a data é indiferente e a mesma regra para 4 e 5.

     

    Porem existem arquivos somente leitura, e quero deletar sempre eles também.

     

    Se possível comente bem o arquivo para eu enteder e adaptar a realidade aqui.

     

    Obrigado

    • Movido Leandro Favretto sábado, 25 de junho de 2011 00:45 Movido local correto (De:Windows Server 2003)
    sábado, 25 de junho de 2011 00:23

Respostas

  • O script abaixo vc utiliza passando parametros na chamada dele. (peguei de um dos links anteriores e adicionei o parametro de extensão)

    '-----------------------------------------------------------------------------------------
    '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 <Folder> <no_days_old>
    '
    '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
    Dim arrMyFile
    Dim strExtensao
    Dim strExtensoes 'passados via argumentos
    
    '=== 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 mp3;wav"
     WScript.Echo "This will delete all mp3 and wav 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
    
    strExtensoes = ucase(oArgs(2)) 'fabio 27/06/2011
    
    '===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) '<<< Aqui é chamada a sub que deleta os arquivos
     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
    		'=== 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
    
    		'Pega extensao
    		arrMyFile = split(MyFile.Name,".")
    		strExtensao = ucase(arrMyFile(ubound(arrMyFile)))
    		
    		if strExtensoes="" or instr(strExtensoes,strExtensao) then
    			'wscript.echo MyFile.name
    			MyFile.delete true
    		end if
    		
    		
    		
    		
    		
    		'Log
    		outputString = MyFile.path & vbtab & MyFile.DateLastModified
    		'WScript.Echo outputString
    		fsOut.WriteLine outputString
    
    		
     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
    '------------------------------------------------------------------------------------------
    
    

     

     


    Fábio de Paula Junior
    segunda-feira, 27 de junho de 2011 23:03
    Moderador
  • A parte que verifica as subpastas é esta:

    	'=== 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
    

     

    Comente toda a parte do código acima e teste.

     


    Fábio de Paula Junior
    • Marcado como Resposta Richard Juhasz sexta-feira, 8 de julho de 2011 20:06
    terça-feira, 5 de julho de 2011 19:37
    Moderador
  • Opa desculpe Henrique nao havia lido direito mas vamos lá...

    espero que ajude fiz em bat... :)

    @echo off
    
    cd "c:\temp\"
    
    echo ****************************************
    
    echo * Fase 1 exclusão 10 dias aquivo .tmp *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -10 /M *.tmp /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp2\"
    
    echo ****************************************
    
    echo * Fase 2 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.* /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp3\"
    
    echo ****************************************
    
    echo * Fase 3 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -20 /M *.* /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp4\"
    
    echo ****************************************
    
    echo * Fase 4 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido"
    
    
    
    cd "c:\temp5\"
    
    echo ****************************************
    
    echo * Fase 5 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido"
    
    

    Explicação do comando FORFILE:

    FORFILES [/D [+ | -] {dd/MM/yyyy | dd}] [/M searchmask] [/C command] Description:
        Selects a file (or set of files) and executes a
        command on that file. This is helpful for batch jobs.

    Parameter List:
        /M    searchmask    Searches files according to a searchmask.
                            The default searchmask is '*' .

        /C    command       Indicates the command to execute for each file.
                            Command strings should be wrapped in double
                            quotes.

                            The default command is "cmd /c echo @file".

                            The following variables can be used in the
                            command string:
                            @file    - returns the name of the file.
      
    /D    date          Selects files with a last modified date greater
                            than or equal to (+), or less than or equal to
                            (-), the specified date using the
                            "dd/MM/yyyy" format; or selects files with a
                            last modified date greater than or equal to (+)
                            the current date plus "dd" days, or less than or
                            equal to (-) the current date minus "dd" days. A
                            valid "dd" number of days can be any number in
                            the range of 0 - 32768.
                            "+" is taken as default sign if not specified.
    Já o comando del...
    acho que esse nao tem novidade
    No item 3 nao entendi bem...

    Se tiver que rodar as subpastas podemos montar tambem.

    Espero ajudar.

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 11 de agosto de 2011 00:55
  • Ola Henrique segue o scritp não consegui testar mas acho que deu certo sim...

    @echo off
    
    for %%A in (%date%) do (set dt=%%A)
    set month=%dt:~0,2%
    set day=%dt:~3,2%
    set year=%dt:~8,2%
    
    
    
    cd "c:\temp2\"
    
    echo ****************************************
    
    echo * Fase 1 exclusão 10 dias aquivo .tmp *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -10 /M *.tmp /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_logTemp2.txt"
    
    
    
    cd "c:\temp\"
    
    echo ****************************************
    
    echo * Fase 2 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.* /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp.txt"
    
    
    
    cd "c:\temp3\"
    
    echo ****************************************
    
    echo * Fase 3 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -20 /M *.* /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp3.txt"
    
    
    
    cd "c:\temp4\"
    
    echo ****************************************
    
    echo * Fase 4 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    _
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp4_txt.txt"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp4_doc.txt"
    
    
    
    cd "c:\temp5\"
    
    echo ****************************************
    
    echo * Fase 5 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp5_txt.txt"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp5_doc.txt"
    
    
    

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    terça-feira, 23 de agosto de 2011 19:16

Todas as Respostas

  • alguma ajuda ????
    domingo, 26 de junho de 2011 01:42
  • alguma ajuda ????
    domingo, 26 de junho de 2011 17:16
  • Então o problema ñ seria apagar as sub pastas, os caminhos que dei são apenas um exemplo.

    Gostaria de saber como colocar um filtro para apagar só um tipo de arquivo ao inves de todos.

    E como colocar várias rotinas de deleção para deletar várias pastas diferentes dentro de um único script.

    segunda-feira, 27 de junho de 2011 14:20
  • Exemplo em PowerShell (arquivo.ps1)

    dir C:\Backup -r | where {($_.creationTime -lt (date).addDays(-3)) -AND ($_.extension -eq ".bkp") } | Remove-Item 
    
    dir C:\Empresa -r | where {($_.extension -eq ".mp3") } | Remove-Item
    

    Na primeira linha são excluidos todos os arquivos com mais de 3 dias e que tenha a extensão .bkp na pasta C:\backup

    Na segunda linha são excluidos todos os mp3 da pasta C:\Empresa.

    Adicione quantas linhas vc precisar alterando os filtros na parte do where

    Para colocar este script para ser executado via Agendador de tarefa você deve criar um .bat com o seguinte código:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command c:\suapasta\seuarquivo.ps1

    Agende esta .BAT para executar via Agendador de tarefas, confira se o caminho do powershell.exe está correto e se o parametro -command está apontando para o seu script (o que contem os comandos de deleção).

     


    Fábio de Paula Junior
    segunda-feira, 27 de junho de 2011 16:31
    Moderador
  •  

    O script seguindo as suas regras:

    #Em 1 só vou deletar arquivos *.tmp com mais que 10 dias
    dir c:\Pasta1 -r | where {($_.creationTime -lt (date).addDays(-10)) -AND ($_.extension -eq ".tmp") } | Remove-Item
    
    #Em 2 vou deletar tudo (inclusive aquivos de hj) e arquivos *.txt
    dir c:\Pasta2 -r | where {($_.extension -eq ".txt") } | Remove-Item
    
    #Em 3 vou deletar tudo, todos os tipos de arquivo e com mais de 20 dias.
    dir c:\Pasta3\Pasta3 -r | where {($_.creationTime -lt (date).addDays(-20)) } | Remove-Item
    
    #Em 4 e 5, vou deletar tudo que for *.txt e *.doc, a data é indiferente e a mesma regra para 4 e 5.
    dir c:\Pasta4 -r | where {($_.extension -eq ".txt") -OR ($_.extension -eq ".doc") } | Remove-Item
    
    dir c:\Pasta5 -r | where {($_.extension -eq ".txt") -OR ($_.extension -eq ".doc") } | Remove-Item
    

    Não entendi direito a regra 2, tudo + txt (txt já está dentro de tudo), considerei que vc queria apagar somente txt.

    Sugiro que teste antes de colocar em produção.


    Fábio de Paula Junior
    segunda-feira, 27 de junho de 2011 16:37
    Moderador
  • Não teria como usar script em VBS ?

    Pois aqui não utilizam o PowerShell

    segunda-feira, 27 de junho de 2011 16:54
  • O script abaixo vc utiliza passando parametros na chamada dele. (peguei de um dos links anteriores e adicionei o parametro de extensão)

    '-----------------------------------------------------------------------------------------
    '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
    Dim arrMyFile
    Dim strExtensao
    Dim strExtensoes 'passados via argumentos
    
    '=== 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 mp3;wav"
     WScript.Echo "This will delete all mp3 and wav 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
    
    strExtensoes = ucase(oArgs(2)) 'fabio 27/06/2011
    
    '===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) '<<< Aqui é chamada a sub que deleta os arquivos
     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
    		'=== 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
    
    		'Pega extensao
    		arrMyFile = split(MyFile.Name,".")
    		strExtensao = ucase(arrMyFile(ubound(arrMyFile)))
    		
    		if strExtensoes="" or instr(strExtensoes,strExtensao) then
    			'wscript.echo MyFile.name
    			MyFile.delete true
    		end if
    		
    		
    		
    		
    		
    		'Log
    		outputString = MyFile.path & vbtab & MyFile.DateLastModified
    		'WScript.Echo outputString
    		fsOut.WriteLine outputString
    
    		
     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
    '------------------------------------------------------------------------------------------
    
    

     

     


    Fábio de Paula Junior
    segunda-feira, 27 de junho de 2011 23:03
    Moderador
  • Salve o script anterior com o nome de deloldfiles.vbs

    Crie um .BAT que chama o script anterior passando parametros

    O padrão é: CSCRIPT delodfiles.vbs <pasta> <superios a x dias> <as seguintes extensões>

    REM Em 1 só vou deletar arquivos *.tmp com mais que 10 dias
    cscript deloldfiles.vbs c:\pasta1 10 .tmp
    
    REM Em 2 vou deletar tudo (inclusive aquivos de hj) e arquivos *.txt
    cscript deloldfiles.vbs c:\pasta2 9999 .txt
    
    REM Em 3 vou deletar tudo, todos os tipos de arquivo e com mais de 20 dias.
    cscript deloldfiles.vbs c:\pasta3\pasta3 20
    
    REM Em 4 e 5, vou deletar tudo que for *.txt e *.doc, a data é indiferente e a mesma regra para 4 e 5.
    cscript deloldfiles.vbs c:\pasta4 9999 .txt;.doc
    

     


    Fábio de Paula Junior
    segunda-feira, 27 de junho de 2011 23:09
    Moderador
  • Fábio, eu testei aqui, porem não deletou os arquivos
    terça-feira, 28 de junho de 2011 00:31
  • Algum erro?

    Descomenta a linha on error resume next e post os erros aqui


    Fábio de Paula Junior
    terça-feira, 28 de junho de 2011 11:35
    Moderador
  • ele só mostra assim:

     

    28/6/2011 18:05:53
    Arquivo Ultima Modificação

     

    Acho que o problema é com os dias lá...

    Fiz uns teste aqui, e ele só deleta 1 arquivo cada vez que executa

    terça-feira, 28 de junho de 2011 21:07
  • Alguem ????
    sábado, 2 de julho de 2011 16:10
  • O que tem no arquivo de log? DeletedFiles.log na mesma pasta do VBS.
    Fábio de Paula Junior
    segunda-feira, 4 de julho de 2011 15:32
    Moderador
  • está na mesma pasta sim.

     

    só aparece isso mesmo:

    28/6/2011 18:05:53
    Arquivo Ultima Modificação

    segunda-feira, 4 de julho de 2011 21:03
  • Contando que vc já comentou a linha "ON ERROR RESUME NEXT"

    Execute o script a partir do prompt de comando: C:> cscript seuscript.vbs <pasta> <dias>

    Veja se será exibido algum erro na tela.

    Fiz o teste na minha máquina e o script está funcionando. Outra coisa que vc pode verificar é se a conta que vc está utilizando para executar o script tem permissão de deletar os arquivos.


    Fábio de Paula Junior
    segunda-feira, 4 de julho de 2011 22:17
    Moderador
  • então eu comentei a linha.

     

    No .bat coloquei assim:

    cscript DelOldFiles.vbs c:\pasta2 9999 .txt

    pause

     

    Dessa forma ele ñ deleta, criei essa pasta e coloquei vários arquivos .txt de hoje. E não mostra nada na tela

     

    Ai mudei o .bat e ficou assim:

    cscript DelOldFiles.vbs c:\pasta2 0 .txt

    pause

     

    Ai ele só deleta 1 arquivo e na tela mostra assim: DelOldFiles.vbs(152,3) Erro de tempo de execução do Microsoft VBScript: Arquivo não encontrado

     

    Estou usando conta de administrador no meu PC pessoal.
    terça-feira, 5 de julho de 2011 00:26
  • Henrique,

    Tente isto: Mova a linha "outputString = MyFile.path & vbtab & MyFile.DateLastModified" para antes da linha com o comentário "´Pega extensão" ficando o trecho assim:

    		outputString = MyFile.path & vbtab & MyFile.DateLastModified
    		
    		'Pega extensao
    		arrMyFile = split(MyFile.Name,".")
    		strExtensao = ucase(arrMyFile(ubound(arrMyFile)))
    		
    		if strExtensoes="" or instr(strExtensoes,strExtensao) then
    			MyFile.delete true
    		end if
    		
    		
    		'Log
    		WScript.Echo outputString
    		fsOut.WriteLine outputString
    

     

     


    Fábio de Paula Junior
    terça-feira, 5 de julho de 2011 12:05
    Moderador
  • Funcionou !

     

    Porem se colocar 9999 não dá certo, só dá certo se colocar 0.

     

    E ele está deletando o que tem dentro das subpastas também, ñ tem como ñ deixar deletar o que está dentro das subpastas ?

    terça-feira, 5 de julho de 2011 17:51
  • A parte que verifica as subpastas é esta:

    	'=== 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
    

     

    Comente toda a parte do código acima e teste.

     


    Fábio de Paula Junior
    • Marcado como Resposta Richard Juhasz sexta-feira, 8 de julho de 2011 20:06
    terça-feira, 5 de julho de 2011 19:37
    Moderador
  • Estou tendo problemas quando quero deletar todos os arquivos dentro de uma pasta.

    Ex:

    :: Deleta tudo (inclusive aquivos de hj) e arquivos *.txt
    cscript DelOldFiles.vbs c:\teste 0

    Dá o seguinte erro: :: DelOldFiles.vbs(61, 1) Microsoft VBScript runtime error: Subscript out of range

     

    E se eu quisesse tambem deletar todos os arquivos *.txt que comecem com AAA é possivel ?

    terça-feira, 9 de agosto de 2011 13:01
  • É relativamente simples... Vou lhe explicar uma das muitas soluções possíveis... Se você tiver um AD pode colocar no script de logoff, mas se não tiver o se preferir, pois é apenas para um usuário pode fazer como explico a baixo, se tiver alguma duvida nos envie...
    Considerações iniciais (o usuário deve ter direito a excluir o arquivo, caso não tenha teremos que pensar em um "Runas" da vida...).

    Copie o código a baixo e salve com *.bat em qualquer lugar...

    del /F /Q "C:\caminhodoarquivo\arquivo.dat"
    


    del /F /Q "C:\caminhodoarquivo\AAA*.txt"

    Após salvar esse arquivo crie um atalho na área de trabalho "Desktop", Mova esse atalho para "menu iniciar - todos os programas - inicializar", coloque o atalho dentro...

    Pronto cada vez que a maquina for ligada o arquivo será apagado... essa é a forma mais básica veja se atende.

    Abraços
    Junior


    Edson Matias Fagundes Junior (Nioks)
    terça-feira, 9 de agosto de 2011 15:48
  • Então, o prob. é que tenho que trabalhar com datas pois não posso deletar todos os arquivos e só os arquivos que foram criados no dia X, preciso manter certos arquivos um determinado nº de dias e só depois apagar

     

    Entendeu ?
    quarta-feira, 10 de agosto de 2011 22:21
  • Opa desculpe Henrique nao havia lido direito mas vamos lá...

    espero que ajude fiz em bat... :)

    @echo off
    
    cd "c:\temp\"
    
    echo ****************************************
    
    echo * Fase 1 exclusão 10 dias aquivo .tmp *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -10 /M *.tmp /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp2\"
    
    echo ****************************************
    
    echo * Fase 2 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.* /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp3\"
    
    echo ****************************************
    
    echo * Fase 3 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -20 /M *.* /c "cmd /c del @file | echo @file foi excluido"
    
    
    
    cd "c:\temp4\"
    
    echo ****************************************
    
    echo * Fase 4 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido"
    
    
    
    cd "c:\temp5\"
    
    echo ****************************************
    
    echo * Fase 5 exclusão todos aquivo   *
    
    echo *          *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido"
    
    

    Explicação do comando FORFILE:

    FORFILES [/D [+ | -] {dd/MM/yyyy | dd}] [/M searchmask] [/C command] Description:
        Selects a file (or set of files) and executes a
        command on that file. This is helpful for batch jobs.

    Parameter List:
        /M    searchmask    Searches files according to a searchmask.
                            The default searchmask is '*' .

        /C    command       Indicates the command to execute for each file.
                            Command strings should be wrapped in double
                            quotes.

                            The default command is "cmd /c echo @file".

                            The following variables can be used in the
                            command string:
                            @file    - returns the name of the file.
      
    /D    date          Selects files with a last modified date greater
                            than or equal to (+), or less than or equal to
                            (-), the specified date using the
                            "dd/MM/yyyy" format; or selects files with a
                            last modified date greater than or equal to (+)
                            the current date plus "dd" days, or less than or
                            equal to (-) the current date minus "dd" days. A
                            valid "dd" number of days can be any number in
                            the range of 0 - 32768.
                            "+" is taken as default sign if not specified.
    Já o comando del...
    acho que esse nao tem novidade
    No item 3 nao entendi bem...

    Se tiver que rodar as subpastas podemos montar tambem.

    Espero ajudar.

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 11 de agosto de 2011 00:55
  • Então, executei aqui e deu o seguinte erro:

    'FORFILES' não é reconhecido como um comando interno
    ou externo, um programa operável ou um arquivo em lotes.

    quinta-feira, 11 de agosto de 2011 02:44
  • Qual seu SO?

    Baixe e instale o Windows resource kits para seu SO eu estou rodando em um 2008 e existe o arquivo.

    Verifique se voce tem o arquivo forfiles dentro do system32.

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 11 de agosto de 2011 03:25
  • Uso o XP e 2003.

     

    No 2003 tem no XP não.

    Posso copiar do 2003 para o XP ?

    sexta-feira, 12 de agosto de 2011 13:56
  • Que eu saiba pode sem problemas...

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 12 de agosto de 2011 14:15
  • Ola Henrique alguma novidade???

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 18 de agosto de 2011 12:26
  • Deu certo !

    Porem teria como colocar em um arquivo de log todos os arquivod que foram deletados ? Um arquivo de log por dia gostaria de gerar.

    sábado, 20 de agosto de 2011 12:32
  • Henrique tente algo assim não vou conseguir testar hj mas amanha valido e testo para você ok...

     

    @file | echo @file foi excluido > c:\texte.txt"

    Veja se isso lhe ajuda...

     

    Abraços.

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    segunda-feira, 22 de agosto de 2011 11:59
  • Então, testei aqui, porem não deu certo.

    Ele só grava o nome do 1º arquivo deletado.

    Coloquei varios arquivos na pasta e só apareceu: "Novo(a) Documento de texto.txt" foi excluido

    Também precisaria que gerasse 1 log por dia ex: 01/01/11 - 010111_LogLimpeza.log

    terça-feira, 23 de agosto de 2011 18:56
  • Ola Henrique segue o scritp não consegui testar mas acho que deu certo sim...

    @echo off
    
    for %%A in (%date%) do (set dt=%%A)
    set month=%dt:~0,2%
    set day=%dt:~3,2%
    set year=%dt:~8,2%
    
    
    
    cd "c:\temp2\"
    
    echo ****************************************
    
    echo * Fase 1 exclusão 10 dias aquivo .tmp *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -10 /M *.tmp /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_logTemp2.txt"
    
    
    
    cd "c:\temp\"
    
    echo ****************************************
    
    echo * Fase 2 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.* /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp.txt"
    
    
    
    cd "c:\temp3\"
    
    echo ****************************************
    
    echo * Fase 3 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -20 /M *.* /c "cmd /c del @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp3.txt"
    
    
    
    cd "c:\temp4\"
    
    echo ****************************************
    
    echo * Fase 4 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    _
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp4_txt.txt"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp4_doc.txt"
    
    
    
    cd "c:\temp5\"
    
    echo ****************************************
    
    echo * Fase 5 exclusão todos aquivo  *
    
    echo *     *
    
    echo ****************************************
    
    FORFILES /D -0 /M *.txt /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp5_txt.txt"
    
    FORFILES /D -0 /M *.doc /c "cmd /c del /f @file | echo @file foi excluido >> c:\%year%%month%%day_LogTemp5_doc.txt"
    
    
    

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    terça-feira, 23 de agosto de 2011 19:16
  • Deu certo !

     

    Como que eu colocaria hora tbm ?

     

    Fiz assim, mas não sei se é o ideal: (é só um teste)

    set DATAHORA=%date:~3,3%_%date:~7,2%_%date:~-4%__%time:~0,2%_%time:~3,2%_%time:~6,2%

    set log=C:\Documents and Settings\Administrador\Desktop\Rotinas Backup\log_%DATAHORA%.txt

    echo TESTE >> %log%

     

    Porem isso não dá certo.

    quinta-feira, 1 de setembro de 2011 21:34
  • Ola veja se isso lhe ajuda

    set Hour=%time:~0,2%
    set Min=%time:~3,2%
    set Sec=%time:~6,2%
    
    
    echo %year%%month%%day%%Hour%%Min%%Sec% 
    

    Abraços


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    quinta-feira, 1 de setembro de 2011 23:53
  • então testei aqui, porem o nome do arquivo fica só: 020911_
    sexta-feira, 2 de setembro de 2011 12:15
  • Segue Script

    for %%A in (%date%) do (set dt=%%A)
    set month=%dt:~0,2%
    set day=%dt:~3,2%
    set year=%dt:~8,2%
    
    
    set Hour=%time:~0,2%
    set Min=%time:~3,2%
    set Sec=%time:~6,2%
    
    
    echo %year%%month%%day%%Hour%%Min%%Sec% 
    

     

    Abraços

     


    Edson Matias Fagundes Junior - (Nioks)
    MCP, MCTS: 2008, MCTS:MBS
    Se a resposta for valida por favor vote como útil.
    sexta-feira, 2 de setembro de 2011 13:15
  •  

    Então, o problema é quando o horário tem apenas um digito como 8hs, 9hrs. O DOS entende como um espaço dessa forma não gera corretamente o arquivo.

    Agora quando o horário tem 2 digitos funciona legal como 10hrs.

    sexta-feira, 2 de setembro de 2011 17:19
  • ???

     

    E o caso de que salavarei meu log em C:\Documents and Settings\Administrador\Desktop\Rotinas Backup\log_%DATAHORA%.txt

    Devido a esses espaços não salva, tem alguma forma ?

    segunda-feira, 5 de setembro de 2011 21:18
  • alguem ????

    • Sugerido como Resposta Vinney Menezes quinta-feira, 9 de agosto de 2012 21:30
    sexta-feira, 9 de setembro de 2011 14:47
  • alguem ?????

    segunda-feira, 12 de setembro de 2011 17:04
  • Deu certo !

     

    Como que eu colocaria hora tbm ?

     

    Fiz assim, mas não sei se é o ideal: (é só um teste)

    set DATAHORA=%date:~3,3%_%date:~7,2%_%date:~-4%__%time:~0,2%_%time:~3,2%_%time:~6,2%

    set log=C:\Documents and Settings\Administrador\Desktop\Rotinas Backup\log_%DATAHORA%.txt

    echo TESTE >> %log%

     

    Porem isso não dá certo.


    Coloque entre aspas:

    set log="C:\Documents and Settings\Administrador\Desktop\Rotinas Backup\log_%DATAHORA%.txt"
    

     


    Fábio de Paula Junior
    segunda-feira, 12 de setembro de 2011 17:12
    Moderador
  • Deu certo
    quarta-feira, 21 de setembro de 2011 23:39