Scrip to clean Windows (like ccleaner and others)?

Discussion in 'Scripting' started by yro, Jun 16, 2016.

  1. yro

    yro MDL Senior Member

    Jul 26, 2009
    475
    82
    10
    Hi guys.

    I would like to ask a script to make some cleanning on Windows, like:

    * Reg clean;
    * Reg defrag, if necessary;
    * Temp / Cookies clean (windows, browsers, etc);
    * Unnecessary windows files clean;
    * Windows update clean and reset (this one is an script already posted on this forum);
    * Ask to reboot.

    Is possible to accomplish this kind of batch script? I dont have the knowledge to do so. Please, if somebody wants to make this an MDL project, it would be nice.
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  2. MrMagic

    MrMagic MDL Guru

    Feb 13, 2012
    5,725
    3,743
    180
    @echo off
    format c:
     
  3. Mr.X

    Mr.X MDL Guru

    Jul 14, 2013
    5,838
    13,354
    180
    #3 Mr.X, Jun 16, 2016
    Last edited by a moderator: Apr 20, 2017
    :trollface:
     
  4. lobo11

    lobo11 TOMAHAWK CHOP

    Feb 16, 2012
    6,472
    4,581
    210
    #4 lobo11, Jun 16, 2016
    Last edited: Jun 16, 2016
    I think Ccleaner already does this, or maybe it's only Pro version. I do not use it to clean registry, just temperary internet files and empty recycle bin, the only reason I have Pro Ver is lisence has not expired
    [​IMG]
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  5. yro

    yro MDL Senior Member

    Jul 26, 2009
    475
    82
    10
    #5 yro, Jun 16, 2016
    Last edited: Jun 16, 2016
    (OP)
    Hi Lobo, I know that. What I meant is to have batch script to do the job :p

    Im seraching for something and Im ending up with some kind of crazy scripts/examples, as follow:

    cd C:\Users\%username%\AppData\Local
    rmdir /S /Q Temp

    del C:\Windows\Prefetch\*.* /Q

    del C:\Windows\Temp\*.* /Q

    del C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent Items*.* /Q
    pause



    ***********************************************************************

    echo Limpando arquivos temporarios e cookies de internet
    del /f /q "%userprofile%\Cookies\*.*"
    cls
    del /f /q "%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*"
    cls
    echo Limpando disco
    if exist "C:\WINDOWS\temp"del /f /q "C:WINDOWS\temp\*.*"
    if exist "C:\WINDOWS\tmp" del /f /q "C:\WINDOWS\tmp\*.*"
    if exist "C:\tmp" del /f /q "C:\tmp\*.*"
    if exist "C:\temp" del /f /q "C:\temp\*.*"
    if exist "%temp%" del /f /q "%temp%\*.*"
    if exist "%tmp%" del /f /q "%tmp%\*.*"
    if exist C:\WINDOWS\Users\AppData\Temp\*.zip del C:\WINDOWS\Users\Users\*.zip /f /q
    if exist C:\WINDOWS\ShellIconCache del /f /q "C:\WINDOWS\ShellI~1\*.*"
    cls

    exit


    Set UserProfilePath=%FolderName%

    Call :RemoveSubfoldersAndFiles %UserProfilePath%\Local Settings\Temp
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\Local Settings\Temporary Internet
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\Application Data\Sun\Java\Deployment\cache
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\AppData\Local\Temp
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\AppData\LocalLow\Temp
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\AppData\LocalLow\Sun\Java\Deployment\cache
    Call :RemoveSubfoldersAndFiles %UserProfilePath%\AppData\Local\Microsoft\Windows\Temporary Internet Files

    ***********************************************

    @echo off

    IF EXIST c:\windows\temp\ del /f /s /q c:\windows\temp\

    DEL /f /s /q %temp%\
    DEL C:\Windows\Prefetch*.* /Q
    DEL C:\Windows\Temp*.* /Q
    DEL C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent Items*.* /Q

    IF EXIST "C:\Users" (
    for /D %%x in ("C:\Users\*") do (
    del /f /s /q "%%x\AppData\Local\Temp"
    del /f /s /q "%%x\AppData\Local\Microsoft\Windows\Temporary Internet Files"
    )
    )

    IF EXIST "C:\Documents and Settings" (
    for /D %%x in ("C:\Documents and Settings\*") do (
    del /f /s /q "%%x\Local Settings\Temp"
    del /f /s /q "%%x\Local Settings\Temporary Internet Files"
    )
    )

    ***********************************************

    Its just some sketchs.. Im looking into these lines and trying to figuire out how to accomplish..

    some help would be great...

    EDIT.: I would like to have all of these lines in a batch script to clean all these things but showing informations about the tasks and, at the end, show a message about all tasks finished and ask the user to reboot the computer... If somebody could help, please, do so.. :p
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  6. lobo11

    lobo11 TOMAHAWK CHOP

    Feb 16, 2012
    6,472
    4,581
    210
    I'm not a coder so you will have to get help from someone who knows how to do this, sorry:(
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  7. Tiger-1

    Tiger-1 MDL Guru

    Oct 18, 2014
    3,397
    3,668
    120
    ;)well yro first log in on MDL after search the section named as MDL Projects and Applications scrow down til encounter the thread DISM++ then make download this file and read with very attention how to use it and finally I'm not resposible for you make mistakes or wrong things right damaging your system ;)
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  8. yro

    yro MDL Senior Member

    Jul 26, 2009
    475
    82
    10
    #8 yro, Jun 16, 2016
    Last edited by a moderator: Apr 20, 2017
    (OP)
    Ok, so.. Im trying to unite everything and Im here:

    Code:
    echo CLEAN THINGS!!!
    
    del /f /q "%userprofile%\Cookies\*.*"
    del /f /q "%userprofile%\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*"
    
    cls
    
    if exist "C:\WINDOWS\temp"del /f /q "C:WINDOWS\temp\*.*"
    if exist "C:\WINDOWS\tmp" del /f /q "C:\WINDOWS\tmp\*.*"
    if exist "C:\tmp" del /f /q "C:\tmp\*.*"
    if exist "C:\temp" del /f /q "C:\temp\*.*"
    if exist "%temp%" del /f /q "%temp%\*.*"
    if exist "%tmp%" del /f /q "%tmp%\*.*"
    if exist "C:\WINDOWS\ShellIconCache\" del /f /q "C:\WINDOWS\ShellI~1\*.*"
    
    cls
    
    if exist "%UserProfilePath%\Local Settings\Temp\" del /f /s /q "%UserProfilePath%\Local Settings\Temp\"
    if exist "%UserProfilePath%\Local Settings\Temporary Internet\" del /f /s /q "%UserProfilePath%\Local Settings\Temporary Internet\"
    if exist "%UserProfilePath%\Application Data\Sun\Java\Deployment\cache\" del /f /s /q "%UserProfilePath%\Application Data\Sun\Java\Deployment\cache\"
    if exist "%UserProfilePath%\AppData\Local\Temp\" del /f /s /q "%UserProfilePath%\AppData\Local\Temp\"
    if exist "%UserProfilePath%\AppData\LocalLow\Temp\" del /f /s /q "%UserProfilePath%\AppData\LocalLow\Temp\"
    if exist "%UserProfilePath%\AppData\LocalLow\Sun\Java\Deployment\cache\" del /f /s /q "%UserProfilePath%\AppData\LocalLow\Sun\Java\Deployment\cache\"
    if exist "%UserProfilePath%\AppData\Local\Microsoft\Windows\Temporary Internet Files\" del /f /s /q "%UserProfilePath%\AppData\Local\Microsoft\Windows\Temporary Internet Files\"
    
    cls
    
    DEL C:\Windows\Prefetch*.* /Q
    DEL C:\Windows\Temp*.* /Q
    DEL C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Recent Items*.* /Q
    
    cls
    
    echo All clean. Reboot now!!!
    pause
    
    Is this correct? Somebody help!!! Please!!! :3
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  9. lobo11

    lobo11 TOMAHAWK CHOP

    Feb 16, 2012
    6,472
    4,581
    210
    #9 lobo11, Jun 16, 2016
    Last edited: Jun 16, 2016
    Be sure to make backup copy or system restore point just in case you need it.:D

    I think task scheduler will write script for you:
    [​IMG]
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  10. pf100

    pf100 MDL Addicted

    Oct 22, 2010
    932
    1,047
    30
    Yes, the code looks fine. Make sure you run it as administrator.
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  11. Garbellano

    Garbellano MDL Addicted

    Aug 13, 2012
    948
    246
    30
  12. lobo11

    lobo11 TOMAHAWK CHOP

    Feb 16, 2012
    6,472
    4,581
    210
    You're not on Windows 10, you just want to start trouble, your a PITA:eek:
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  13. Garbellano

    Garbellano MDL Addicted

    Aug 13, 2012
    948
    246
    30
    I run this piece of s**t virtually
     
  14. lobo11

    lobo11 TOMAHAWK CHOP

    Feb 16, 2012
    6,472
    4,581
    210
    If you dislike it so much, why run it, and why come over here and complain constantly, We did not write OS, please direct your dislikes of OS to MS, we're just trying to get by with what they furnish us
    your bitching to the wrong people:confused:
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  15. k3lt

    k3lt MDL Junior Member

    Nov 2, 2013
    88
    15
    0
    #15 k3lt, Jun 18, 2016
    Last edited by a moderator: Apr 20, 2017
    Im using this from time to time, especially after large windows updates.

    Code:
    @echo offtitle .
    color 1F
    openfiles >nul 2>&1
    if %errorlevel% NEQ 0 goto :UACPrompt
    goto :gotAdmin
    
    
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~fs0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /b
    
    
    :gotAdmin
    DEL /S /F /Q "%temp%\*" 1>nul 2>nul
    DEL /S /F /Q %systemroot%\temp\* 1>nul 2>nul
    DEL /S /F /Q %systemroot%\inf\*.log 1>nul 2>nul
    DEL /S /F /Q %systemroot%\Logs\CBS\* 1>nul 2>nul
    DEL /S /F /Q %systemroot%\Logs\DPX\* 1>nul 2>nul
    DEL /S /F /Q %systemroot%\Logs\DISM\* 1>nul 2>nul
    DEL /S /F /Q %systemroot%\Microsoft.NET\Framework\v2.0.50727\*.log 1>nul 2>nul
    DEL /S /F /Q %systemroot%\Microsoft.NET\Framework\v4.0.30319\*.log 1>nul 2>nul
    if exist %systemroot%\SysWOW64\cmd.exe DEL /S /F /Q %systemroot%\Microsoft.NET\Framework64\v2.0.50727\*.log 1>nul 2>nul
    if exist %systemroot%\SysWOW64\cmd.exe DEL /S /F /Q %systemroot%\Microsoft.NET\Framework64\v4.0.30319\*.log 1>nul 2>nul
    DEL /S /F /Q %systemroot%\SoftwareDistribution\Download\* 1>nul 2>nul
    RD /S /Q "%LocalAppData%\Microsoft\Windows\WER\ReportQueue" 1>nul 2>nul
    for /f %%i in ('"dir /s /b /ad "%temp%"" 2^>nul') do RD /S /Q %%i 1>nul 2>nul
    for /f %%i in ('"dir /s /b /ad %windir%\SoftwareDistribution\Download" 2^>nul') do RD /S /Q %%i 1>nul 2>nul
    for /f %%i in ('"dir /s /b /ad %windir%\temp" 2^>nul') do RD /S /Q %%i 1>nul 2>nul
     
  16. loader24

    loader24 MDL Novice

    May 18, 2016
    12
    3
    0
    #16 loader24, Feb 9, 2017
    Last edited by a moderator: Apr 20, 2017
    I like this!! I'm not a coder I like it to the fact that it really clean unnecessary files from my computer.
    Thanks!
     
  17. TairikuOkami

    TairikuOkami MDL Addicted

    Mar 15, 2014
    667
    520
    30
    #17 TairikuOkami, Feb 13, 2017
    Last edited by a moderator: Apr 20, 2017
    I use this code after every Windows update (every 2 weeks) plus WiseCare and I turn off PC with CCleaner daily.

    Code:
    cipher /d /s:C:\
    fsutil usn deletejournal /d /n c:
    chkdsk /scan
    compact /CompactOs:never
    winmgmt /salvagerepository
    
    del "%temp%\*" /s /f /q
    del "C:\$Recycle.bin\*" /s /f /q
    del "D:\$Recycle.bin\*" /s /f /q
    del "E:\$Recycle.bin\*" /s /f /q
    del "%systemroot%\temp\*" /s /f /q
    
    vssadmin delete shadows /for=c: /all /quiet
    Dism /Online /Cleanup-Image /CheckHealth
    Dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase
    cleanmgr /sageset:65535 & cleanmgr /sagerun:65535
    You can easily add CCleaner to it, like:

    Code:
    taskkill /f /im dllhost.exe
    start "" "C:\Program Files\CCleaner\CCleaner64.exe" /AUTO
    I defrag system drive outside Windows, obviously.

    Code:
    Boot Windows USB - Repair - Troubleshoot - CMD - type/enter
    c:
    cd windows
    cd system32
    defrag c: /d /u
     
  18. NTurky

    NTurky MDL Novice

    Aug 1, 2009
    15
    2
    0
    #18 NTurky, Apr 30, 2017
    Last edited: Apr 30, 2017
    First at all, I'm from Argentina so I speak Spanish and just a little english so please excuse my lack of vocabulary or grammatical mistakes.
    I learned vbs a few years back to be able to program some scripts at work. I know powershell is a lot better, but I work in a large public organization with thousands of computers which most uses XP and doesn't have it enabled.
    But I think it works very well from XP to W10.
    Some warnings though... because I speak spanish and most of my co-workers doesn't know english, most of the functions, variables and code clarifications are in spanish. Some folders locations are localized in XP, so that part of the code will not work in other languages, but I think it's very easy to fix.
    The code is very modular, every action is done by some function, so it's very easy to disable or modify.
    The manual deletion part is done with some dictionary objects, a recursive function that goes through all the folders saving the path info, and then the delete part is executed. It's made that way on purpose to be able to generate some detailed log, and because Windows behave pretty stupid and dumb if it encounters a locked file in between.

    Well, my vbs script do this:

    - Manually deletes files from this folders:
    $RECICLER.BIN
    Recycler
    Recycled
    Temp
    ProgramData\Microsoft\Windows\WER
    ProgramData\Microsoft\Windows Defender\Scans\History\Results
    Program Files\Google\Update\Download
    Windows\Debug
    Windows\Logs
    Windows\MiniDump
    Windows\pchealth\ERRORREP
    Windows\Prefetch
    Windows\Security\Logs
    Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Media Player\Art Cache
    Windows\SoftwareDistribution\Download
    Windows\SoftwareDistribution\DataStore\Logs
    Windows\System32\spool\Printers
    Windows\System32\Wbem\Logs
    Windows\Temp
    Windows\$*$
    Windows\ie7updates
    Windows\ie8updates
    Windows\*.log
    AppData\Local\Downloaded Installations
    AppData\Local\Google\Chrome\User Data\Default\Cache
    AppData\Local\Microsoft\Media Player
    AppData\Local\Microsoft\Messenger
    AppData\Local\Microsoft\Windows Live Contacts
    AppData\Local\Microsoft\Windows\Burn
    AppData\Local\Microsoft\Windows\Explorer
    AppData\Local\Microsoft\Windows\History
    AppData\Local\Microsoft\Windows\Temporary Internet Files
    AppData\Local\Mozilla\Firefox\Profiles
    AppData\Local\Opera\Opera\Cache
    AppData\Local\Opera Software\Opera Stable\Cache
    AppData\Local\Opera Software\Opera Stable\Media Cache
    AppData\Local\Temp
    AppData\Local\Thunderbird\Profiles
    AppData\Local\Thunderbird\Updates
    AppData\LocalLow\Microsoft\CryptnetUrlCache
    AppData\LocalLow\Sun\Java\Deployment\cache
    AppData\LocalLow\Sun\Java\Deployment\javaws\cache
    AppData\LocalLow\Sun\Java\Deployment\SystemCache
    AppData\Roaming\Adobe\Flash Player\AssetCache
    AppData\Roaming\Macromedia\Flash Player
    AppData\Roaming\Microsoft\Windows\Cookies
    AppData\Roaming\Microsoft\Windows\Recent
    AppData\Roaming\Microsoft\Word
    AMD
    cpqs
    Dell
    Drivers
    Hotfix
    i386
    Intel
    Lexmark
    PerfLogs
    Recovery
    SYSTEM.SAV
    Xerox

    - Runs this Windows utilities:
    Cleanmgr (Windows Clean Manager) - Automatically select all tasks except this two: Office Setup Files and Compress old Files. Only safe way to delete WU backups from W7 and above.
    Dism - Deletes Services Packs from W7 and above
    Vssadmin - Deletes recoverys
    Wevutil - Deletes event registrys

    - Stops and restart some windows services to be able to delete some files.
    - Needs to be run as Administrator, and elevated in W10. (cmd -> right button - > run as administrator)
    - Creates some txt log in the desktop and shows a popup with the space made and the time it took to complete.
    - Disables Hibernation.


    BORRA_TEMPS.vbs
    Code:
    '**************************************************************************************************************
    'Nombre del Script : BORRA_TEMPS.vbs
    'Versión           : v1.27
    'Autor             : NTurky
    'Creado el         : 01/09/2015
    'Modificado        : 18/12/2015
    'Descripcion       : Borra archivos temporales de carpetas en la raíz del disco, carpetas del sistema y dentro
    '                    del profile de los usuarios.
    '                    Utiliza las herramientas de Windows CLEANMGR.exe, DISM.exe, VSSADMIN.exe y
    '                    WEVTUTIL.exe. También deshabilita la hibernación si ésta se encontrara activada.
    '**************************************************************************************************************
    Option Explicit
    '**************************************************************************************************************
    '                                                  CONSTANTES                                        
    '**************************************************************************************************************
    Const kVER = "v1.27"
    Const kTITULO = "BorraTemps"
    Const kFLAG = "69"
    Const kLOGEXTENDIDO = True ' TRUE para archivo de LOG detallado
    
    'Constantes para ejecución de utilidades
    Const kESPERAR = True
    Const kSEGUIR = False
    Const kMOSTRAR = 1
    Const kOCULTAR = 0
    
    Const kDECIMALES = 2
    Const kAGRUPAR = -1 ' True = -1 , False = 0 , Default = -2
    Const kKBYTES = 1024
    Const kMBYTES = 1048576
    Const kGBYTES = 1073741824
    
    'Constantes de archivos
    Const kLECTURA = 1
    Const kESCRITURA = 2
    Const kAGREGAR = 0
    
    'Constantes para la función BorradoManual
    Const kCARPETAS = True
    Const kARCHIVOS = False
    
    'Constantes para la función RecorreCarpetas
    Const kCOMPLETA = True
    Const kCONTENIDO = False
    
    'Constantes para la función ModificaServicio
    Const kFINALIZAR = True
    Const kINICIAR = False
    
    'Constantes para el registro de Windows
    Const HKCR = &H80000000 ' HKEY_CLASSES_ROOT
    Const HKCU = &H80000001 ' HKEY_CURRENT_USER
    Const HKLM = &H80000002 ' HKEY_LOCAL_MACHINE
    Const HKUS = &H80000003 ' HKEY_USERS
    Const HKCC = &H80000005 ' HKEY_CURRENT_CONFIG
    
    '**************************************************************************************************************
    '                                                 DECLARACIONES                                      
    '**************************************************************************************************************
    'Variable para configurar el espaciado entre párrafos
    Dim kESPACIOS    :    kESPACIOS = vbCrLf
    
    'Declaracion de variables
    Dim dtmTiempoInicio, dtmTiempoFin, strTiempoEmp
    Dim intEspLibIni, intEspLibFin, intEsp
    Dim strLogNom, strLogRuta, strEquipo, strOS
    Dim dicArchivos    :    Set dicArchivos = CreateObject("Scripting.Dictionary")
    Dim dicCarpetas    :    Set dicCarpetas = CreateObject("Scripting.Dictionary")
    Dim intCArch    :    intCArch = 0
    Dim intCCarp    :    intCCarp = 0
    Dim objLogArch
    
    'Declaración de objetos
    Dim objFS        :    Set objFS = CreateObject("Scripting.FileSystemObject")
    Dim objShell    :    Set objShell = CreateObject("WScript.Shell")
    
    'Nombre de equipo
    strEquipo = objShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
    
    Dim objDisco    :    Set objDisco = objFS.GetDrive(objShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%"))
    Dim objReg        :    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
                                    & strEquipo & "\root\default:StdRegProv")
    
    'Registro la hora de inicio
    dtmTiempoInicio = Time
    
    '**************************************************************************************************************
    '                                              PROGRAMA PRINCIPAL                                    
    '**************************************************************************************************************
    If CreaArchivo Then
        intEspLibIni = objDisco.FreeSpace
        CheckSO
        Borrar
        DeshabilitaHibernacion
        dtmTiempoFin = Time
        strTiempoEmp = TiempoTranscurrido (dtmTiempoInicio, dtmTiempoFin)
        intEspLibFin = objDisco.FreeSpace
        intEsp = intEspLibFin - intEspLibIni
        Finalizar
        objShell.Popup "Se eliminaron " & Unidades(intEsp) & vbNewLine &_
                        "Tiempo empleado: " & strTiempoEmp, , kTITULO & " " & kVER, VBInformation
     
        Set objShell = Nothing
    Else
        WScript.echo "El archivo log no pudo ser creado! Disco lleno?"
    End If
    
    '**************************************************************************************************************
    '                                                   FUNCIONES                                        
    '**************************************************************************************************************
    Sub BorraCarpetas(dic, booCarpetas)
     
        Dim arrDatos
        Dim booBorrado
        Dim intInd, intCC, intCE, intTam
        Dim strElementos, strEstado, strPath, strResultado
        Dim objElementos
     
        intCC = 0
        intCE = 0
     
        arrDatos = dic.Items
        strElementos = "archivos"
     
        If booCarpetas Then
            strElementos = "subcarpetas"
            strEstado = "ELIMINADA"
        Else
            strEstado = "ELIMINADO"
        End If
     
        'Agrego un Do ... While False para poder saltar a la próxima iteración del bucle For
        'en el caso de que una subcarpeta no exista porque fue eliminada con la carpeta raíz
        'que la contenía.
        For intInd = 0 To dic.count - 1 : Do
            On Error Resume Next
            If booCarpetas Then
                'Agrego esta comprobación para que la información del borrado de carpetas
                'del log sea correcta.
                If objFS.FolderExists(arrDatos(intInd)) Then
                    Set objElementos = objFS.GetFolder(arrDatos(intInd))
                Else
                    If kLOGEXTENDIDO Then
                        Salida intInd + 1 & " - " & arrDatos(intInd) & " - " & Unidades(0) & " - " & strEstado
                    End If
                    intCC = intCC + 1
                    Exit Do
                End If
            Else
                Set objElementos = objFS.GetFile(arrDatos(intInd))
            End If
     
            strPath = objElementos.Path
            intTam = objElementos.Size
            objElementos.Delete(True)
     
            If Err.Number <> 0 Then
                intCE = intCE + 1
                booBorrado = False
                Err.Clear
            Else
                intCC = intCC + 1
                booBorrado = True
            End If
     
            If kLOGEXTENDIDO Then
                strResultado = intInd + 1 & " - " & strPath & " - " & Unidades(intTam)
                If booBorrado Then
                    strResultado = strResultado & " - " & strEstado
                Else
                    strResultado = strResultado & " - NO PUDO SER " & strEstado
                End If
                Salida strResultado
            End If
     
            Set objElementos = Nothing
     
        Loop While False : Next
     
        Salida "Se eliminaron " & intCC & " " & strElementos
        Salida "(No pudieron eliminarse " & intCE & " " & strElementos & ")"
     
    End Sub
    
    Sub BorradoManual
     
        Dim intEspIni, intEspFin
        Dim dtmTI
     
        Salida ">>> Iniciando secuencia de borrado manual"
     
        dtmTI = Time
        intEspIni = objDisco.FreeSpace
     
        Salida "Creando listado de archivos y carpetas a eliminar..."
     
        ElementosParaBorrar
     
        Salida dicArchivos.count & " archivos seleccionados para su eliminación"
        Salida dicCarpetas.count & " carpetas seleccionadas para su eliminación"
     
        Salida "Borrando archivos..."
     
        BorraCarpetas dicArchivos, kARCHIVOS
     
        Salida "Borrando carpetas..."
     
        BorraCarpetas dicCarpetas, kCARPETAS
     
        intEspFin = objDisco.FreeSpace - intEspIni
        Salida ">>> Secuencia de borrado manual finalizada"
        Salida ">>> Tiempo transcurrido: " & TiempoTranscurrido(dtmTI, Time)
        Salida ">>> Espacio liberado   : " & Unidades(intEspFin)
        Salida kESPACIOS
     
    End Sub
    
    Sub Borrar
     
        Dim dtmTiempoIni
     
        dtmTiempoIni = Time
     
        ModificaServicio "wuauserv", kFINALIZAR
        ModificaServicio "TrustedInstaller", kFINALIZAR
        ModificaServicio "Spooler", kFINALIZAR
        Salida kESPACIOS
     
        'Borraro manual de archivos
        BorradoManual
     
        'Ejecución de la utilidad "CLEANMGR.EXE"
        UtilidadCleanmgr 'Es la única forma de eliminar Updates de Win 7 y superiores.
     
        If strOS = "NT" Then
            'Acá va la rutina de borrado para Win 7 y superiores
            UtilidadDism 'Elimina Service Packs de Win 7 y superiores
            UtilidadVssadmin 'Elimina copias de seguridad
            UtilidadWevtutil 'Elimina registros de eventos
        End If
     
        ModificaServicio "wuauserv", kINICIAR
        ModificaServicio "TrustedInstaller", kINICIAR
        ModificaServicio "Spooler", kINICIAR
        Salida kESPACIOS
     
    End Sub
    
    Sub CheckSO
     
        Dim strReg
     
        strReg = objShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
     
        If Cint(Left(strReg,1)) > 5 Then
            strOS = "NT"
        Else
            strOS = "NT5"
        End If
     
    End Sub
    
    Function CreaArchivo
     
        CreaArchivo = False
     
        strLogNom = kTITULO & "-" & strEquipo & "-" & Year(Date) & EstiloNum(Month(Date)) & EstiloNum(Day(Date)) _
                    & "-" & EstiloNum(Hour(dtmTiempoInicio)) & EstiloNum(Minute(dtmTiempoInicio)) _
                    & EstiloNum(Second(dtmTiempoInicio)) & ".log"
     
        strLogRuta = objShell.SpecialFolders("Desktop") & "\" & strLogNom
     
        'Creo el archivo log en el escritorio
        Set objLogArch = objFS.OpenTextFile(strLogRuta, kESCRITURA, True)
     
        If objFS.FileExists(strLogRuta) Then
            CreaArchivo = True
            Encabezado
        End If
     
    End Function
    
    Sub DeshabilitaHibernacion
     
        Dim strCmd
        Dim strArchivo    :    strArchivo = "hiberfil.sys"
        Dim strUnidad    :    strUnidad = objShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\"
     
        'Si no existe el archivo, es porque está deshabilitada la hibernación
        If objFS.FileExists(strUnidad & strArchivo) Then
            'Hay una pequeña diferencia en el parámetro entre XP y 7 o superiores.
            If strOS = "NT" Then
                strCmd = "cmd /c powercfg -h off"
            Else
                strCmd = "cmd /c powercfg /h off"
            End If
            objShell.Run strCmd, kOCULTAR, kESPERAR
            Salida "Hibernación deshabilitada"
        End If
     
    End Sub
    
    Sub ElementosParaBorrar
     
        On Error Resume Next
     
        Dim booUpdates
        Dim intInd
        Dim strUnidad, strUsuarios, strUsuario
        Dim objUsuarios, objUsuario, objCarpeta, objSubCarpeta, objArchivo
        Dim arrCarpRaiz, arrCarpSis, arrCarpUsr
     
        strUnidad = objShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%") & "\"
        strUsuarios = objFS.GetParentFolderName(objShell.ExpandEnvironmentStrings("%USERPROFILE%"))
     
        'Carpetas del sistema
        arrCarpSis = Array("$RECICLER.BIN",_
                            "Recycler",_
                            "Recycled",_
                            "Temp",_
                            "ProgramData\Microsoft\Windows\WER",_
                            "ProgramData\Microsoft\Windows Defender\Scans\History\Results",_
                            "Program Files\Google\Update\Download",_
                            "Windows\Debug",_
                            "Windows\Logs",_
                            "Windows\MiniDump",_
                            "Windows\pchealth\ERRORREP",_
                            "Windows\Prefetch",_
                            "Windows\Security\Logs",_
                            "Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Media Player\Art Cache",_
                            "Windows\SoftwareDistribution\Download",_
                            "Windows\SoftwareDistribution\DataStore\Logs",_
                            "Windows\System32\spool\Printers",_
                            "Windows\System32\Wbem\Logs",_
                            "Windows\Temp")
     
        For intInd = LBound(arrCarpSis) to UBound(arrCarpSis)
            RecorreCarpetas strUnidad & arrCarpSis(intInd), kCONTENIDO
        Next
     
        Set objCarpeta = objFS.GetFolder(objShell.ExpandEnvironmentStrings("%WINDIR%"))
     
        'Actualizaciones de Windows XP
        If strOS = "NT5" Then
            For Each objSubCarpeta in objCarpeta.SubFolders
                booUpdates = False
                If Left(objSubCarpeta.Name, 1) = "$" And Right(objSubCarpeta.Name, 1) = "$" Then
                    booUpdates = True
                Elseif objSubCarpeta.Name = "ie7updates" Or objSubCarpeta.Name = "ie8updates" Then
                    booUpdates = True
                End If
                If booUpdates Then
                    RecorreCarpetas objSubCarpeta.Path, kCOMPLETA
                End If
            Next
        End If
     
        'Archivos Log en Carpeta Windows
        For Each objArchivo in objCarpeta.Files
            If LCase(objFS.GetExtensionName(objArchivo.Name)) = "log" Then
                dicArchivos.add intCArch, objArchivo.Path
                intCArch = intCArch + 1
            End If
        Next
     
        Set objCarpeta = Nothing
        Set objSubCarpeta = Nothing
        Set objArchivo = Nothing
     
        'Carpetas de los usuarios
        Set objUsuarios = objFS.GetFolder(strUsuarios)
     
        For Each objUsuario in objUsuarios.SubFolders
            strUsuario = objUsuario.Path & "\"
            If strOS = "NT" Then
                arrCarpUsr = Array("AppData\Local\Downloaded Installations",_
                                    "AppData\Local\Google\Chrome\User Data\Default\Cache",_
                                    "AppData\Local\Microsoft\Media Player",_
                                    "AppData\Local\Microsoft\Messenger",_
                                    "AppData\Local\Microsoft\Windows Live Contacts",_
                                    "AppData\Local\Microsoft\Windows\Burn",_
                                    "AppData\Local\Microsoft\Windows\Explorer",_
                                    "AppData\Local\Microsoft\Windows\History",_
                                    "AppData\Local\Microsoft\Windows\Temporary Internet Files",_
                                    "AppData\Local\Mozilla\Firefox\Profiles",_
                                    "AppData\Local\Opera\Opera\Cache",_
                                    "AppData\Local\Opera Software\Opera Stable\Cache",_
                                    "AppData\Local\Opera Software\Opera Stable\Media Cache",_
                                    "AppData\Local\Temp",_
                                    "AppData\Local\Thunderbird\Profiles",_
                                    "AppData\Local\Thunderbird\Updates",_
                                    "AppData\LocalLow\Microsoft\CryptnetUrlCache",_
                                    "AppData\LocalLow\Sun\Java\Deployment\cache",_
                                    "AppData\LocalLow\Sun\Java\Deployment\javaws\cache",_
                                    "AppData\LocalLow\Sun\Java\Deployment\SystemCache",_
                                    "AppData\Roaming\Adobe\Flash Player\AssetCache",_
                                    "AppData\Roaming\Macromedia\Flash Player",_
                                    "AppData\Roaming\Microsoft\Windows\Cookies",_
                                    "AppData\Roaming\Microsoft\Windows\Recent",_
                                    "AppData\Roaming\Microsoft\Word")
            Else
                arrCarpUsr = Array("Datos de programa\Adobe\Flash Player\AssetCache",_
                                    "Datos de programa\Macromedia\Flash Player",_
                                    "Datos de programa\Microsoft\CryptnetUrlCache",_
                                    "Datos de programa\Microsoft\Word",_
                                    "Datos de programa\Opera\Opera\Cache",_
                                    "Datos de programa\Opera Software\Opera Stable\Cache",_
                                    "Datos de programa\Opera Software\Opera Stable\Media Cache",_
                                    "Datos de programa\Sun\Java\Deployment\cache",_
                                    "Datos de programa\Sun\Java\Deployment\javaws\cache",_
                                    "Datos de programa\Sun\Java\Deployment\SystemCache",_
                                    "Configuración local\Datos de programa\Google\Chrome\User Data\Default\Cache",_
                                    "Configuración local\Datos de programa\Mozilla\Firefox\Profiles",_
                                    "Configuración local\Datos de programa\Thunderbird\Profiles",_
                                    "Configuración local\Datos de programa\Thunderbird\Updates",_
                                    "Configuración local\Datos de programa\Microsoft\Media Player\Art Cache",_
                                    "Configuración local\Temp",_
                                    "Configuración local\Archivos temporales de Internet",_
                                    "Configuración local\Historial",_
                                    "Reciente",_
                                    "Cookies")
            End If
     
            For intInd = LBound(arrCarpUsr) to UBound(arrCarpUsr)
                RecorreCarpetas strUsuario & arrCarpUsr(intInd), kCONTENIDO
            Next
     
        Next
     
        Set objUsuarios = Nothing
        Set objUsuario = Nothing
        Set objArchivo = Nothing
     
        'Carpetas en raiz
        arrCarpRaiz = Array("AMD",_
                            "cpqs",_
                            "Dell",_
                            "Drivers",_
                            "Hotfix",_
                            "i386",_
                            "Intel",_
                            "Lexmark",_
                            "PerfLogs",_
                            "Recovery",_
                            "SYSTEM.SAV",_
                            "Xerox")
     
        For intInd = LBound(arrCarpRaiz) to UBound(arrCarpRaiz)
            If objFS.FolderExists(strUnidad & arrCarpRaiz(intInd)) Then
                RecorreCarpetas strUnidad & arrCarpRaiz(intInd), kCOMPLETA
            End If
        Next
     
    End Sub
    
    Sub Encabezado
     
        objLogArch.WriteLine("***** " & kTITULO & " " & kVER & " - por NTurky *****")
        objLogArch.WriteLine("***** Inicio del proceso: " & Date() & " - " & dtmTiempoInicio & " *****")
        objLogArch.WriteLine(kESPACIOS) 'Deja 2 renglones, uno por el vbCrLf y otro por el WriteLine
        objLogArch.WriteLine("Nombre de equipo:            " & strEquipo)
        objLogArch.WriteLine("Unidad procesada:            " & objDisco.DriveLetter & " (" & objDisco.VolumeName & ")")
        objLogArch.WriteLine("Capacidad del disco:         " & Unidades(objDisco.TotalSize))
        objLogArch.WriteLine(kESPACIOS)
     
    End Sub
    
    Function EstiloNum(intT)
        'Convierte un número a un string de 2 posiciones. Por Ej: "1" a "01"
        EstiloNum = String(2-Len(intT),"0") & intT
     
    End Function
    
    Sub Finalizar
     
        objLogArch.WriteLine("Espacio libre al iniciar:    " & Unidades(intEspLibIni))
        objLogArch.WriteLine("Espacio libre al terminar:   " & Unidades(intEspLibFin))
        objLogArch.WriteLine("Total de espacio liberado:   " & Unidades(intEsp))
        objLogArch.WriteLine(kESPACIOS)
        objLogArch.WriteLine("Inicio del proceso:          " & dtmTiempoInicio)
        objLogArch.WriteLine("Fin del proceso:             " & dtmTiempoFin)
        objLogArch.WriteLine("Tiempo transcurrido:         " & strTiempoEmp)
        objLogArch.Close
     
        Set objLogArch = Nothing
        Set objFS = Nothing
        Set objDisco = Nothing
        Set objReg = Nothing
     
    End Sub
    
    Sub ModificaServicio (strServicio, booFinalizar)
     
        Dim intCant, intErr, intTimeOut
        Dim strSalida, strAccion
        Dim objServicio
        Dim objCimv2        :    Set objCimv2 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                                                    strEquipo & "\root\cimv2")
     
        Dim colServicios        :    Set colServicios = objCimv2.ExecQuery("Select * from Win32_Service Where Name='" & _
                                                            strServicio & "'")
     
        intCant = colServicios.Count
        intTimeOut = 0
     
        'Chequeo que el servicio exista
        If intCant > 0 Then
            For Each objServicio in colServicios
                strSalida = "El servicio " & UCase(objServicio.DisplayName) & " "
                If booFinalizar Then 'Detener servicio
                    If objServicio.Started Then
                        objServicio.StopService
                        'Espero a que se finalice el servicio
                        Do While objServicio.Started
                            Set objServicio = objCimv2.Get("Win32_Service.Name='" & strServicio & "'")
                            WScript.Sleep 100
                            intTimeOut = intTimeOut + 1
                            'Agrego un TimeOut de 1 minuto para los casos en que se cuelgan los servicios
                            If intTimeOut > 600 Then
                                Salida strSalida & "no pudo ser detenido."
                                Exit Sub
                            End If
                        Loop
                    Else
                        Salida strSalida & "estaba detenido."
                        Exit Sub
                    End If
                    strAccion = "ha sido detenido."
                Else 'Iniciar servicio
                    If Not objServicio.Started Then
                        objServicio.StartService
                        'Espero a que se inicie el servicio
                        Do While Not objServicio.Started
                            Set objServicio = objCimv2.Get("Win32_Service.Name='" & strServicio & "'")
                            WScript.Sleep 100
                            intTimeOut = intTimeOut + 1
                            'Agrego un TimeOut de 1 minuto para los casos en que se cuelgan los servicios
                            If intTimeOut > 600 Then
                                Salida strSalida & "no pudo ser iniciado."
                                Exit Sub
                            End If
                        Loop
                    Else
                        Salida strSalida & "estaba iniciado."
                        Exit Sub
                    End If
                    strAccion = "ha sido iniciado."
                End If
                Salida strSalida & strAccion
            Next
        End If
    End Sub
    
    Sub RecorreCarpetas(strCarpeta, booCompleta)
     
        Dim objC, objSC, objA
     
        If (objFS.FolderExists(strCarpeta)) Then
            On Error Resume Next
     
            Set objC = objFS.GetFolder(strCarpeta)
            'recorre las subcarpetas
            For Each objSC in objC.SubFolders
                'recursividad para subcarpetas
                RecorreCarpetas objSC.Path, kCOMPLETA
            Next
            'recorre archivos de la carpeta raíz
            For Each objA in objC.Files
                dicArchivos.add intCArch, objA.Path
                intCArch = intCArch + 1
            Next
     
            If booCompleta Then
                dicCarpetas.Add intCCarp, objC.Path
                intCCarp = intCCarp + 1
            End If
     
            Set objC = Nothing
            Set objSC = Nothing
            Set objA = Nothing
        End If
     
    End Sub
    
    Sub Salida (strLinea)
        If strLinea <> vbCrLf Then
            strLinea = EstiloNum(Hour(Time)) & ":" & EstiloNum(Minute(Time)) & ":" & EstiloNum(Second(Time))_
                        & " - " & strLinea
        End If
        objLogArch.WriteLine(strLinea)
     
    End Sub
    
    Function TiempoTranscurrido(dtmIni, dtmFin)
     
        Dim intTemp
        Dim intHoras, intMinutos, intSegundos
        'Calculo el tiempo transcurrido
        intTemp = DateDiff("s", dtmIni, dtmFin) 'me da la diferencia en segundos
        'Hago esto para pasarlo a HH:MM:SS (string)
        intHoras = Int(intTemp/3600)
        intTemp = intTemp - (3600*intHoras)
        intMinutos = Int(intTemp/60)
        intSegundos = intTemp - (60*intMinutos)
     
        TiempoTranscurrido = EstiloNum(intHoras) & ":" & EstiloNum(intMinutos) & ":" & EstiloNum(intSegundos)
     
    End Function
    
    Function Unidades(intEsp)
     
        Dim intUni, strUniNom
     
        If Abs(intEsp) >= kGBYTES Then
            intUni = kGBYTES
            strUniNom = "GBytes"
        Elseif Abs(intEsp) >= kMBYTES Then
            intUni = kMBYTES
            strUniNom = "MBytes"
        Elseif Abs(intEsp) >= kKBYTES Then
            intUni = kKBYTES
            strUniNom = "KBytes"
        Else
            intUni = 1
            strUniNom = "Bytes"
        End If
     
        Unidades = FormatNumber(intEsp/(intUni), kDECIMALES, , , kAGRUPAR) & " " & strUniNom
     
    End Function
    
    Sub UtilidadCleanmgr
     
        Dim arrClaReg, strClave, strFlag, strErr, strUnidad, strClaReg, strLog
        Dim objCarpeta, objArchivo
     
        strClave = "Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\"
        strFlag = "StateFlags00" & kFLAG
     
        'Lleno el vector con los componentes seleccionables
        objReg.EnumKey HKLM, strClave, arrClaReg
     
        Salida ">>> Iniciando utilidad CLEANMGR"
        dtmTiempoFin = Time
        intEsp = objDisco.FreeSpace
        strUnidad = objShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%")
     
        'Seteo el flag para la eliminación
        For Each strClaReg in arrClaReg
            'No quiero eliminar los archivos de instalación de Office,
            'ni comprimir archivos viejos
            If Not UCase(strClaReg) = "OFFICE SETUP FILES" And Not UCase(strClaReg) = "COMPRESS OLD FILES" Then
                objReg.SetDWORDValue HKLM, strClave & strClaReg, strFlag, 2
                If kLOGEXTENDIDO Then
                    If Err = 0 Then
                        Salida "Opción seleccionada: " & strClaReg
                    Else
                        Salida "Error: " & Err.Number & " - " & Err.Description & _
                            "Al intentar seleccionar la opción " & strClaReg & _
                            " para su eliminación"
                        Err.Clear
                    End If
                End If
            End If
        Next
     
        'Ejecuto la utilidad
        Salida "Ejecutando la utilidad..."
        strErr = objShell.Run("cleanmgr /d " & strUnidad & " /sagerun:" & kFLAG, kMOSTRAR, kESPERAR)
     
        If strErr <> 0 Then
            Salida "La utilidad CLEANMGR finalizó con error"
        Else
            Salida "La utilidad CLEANMGR finalizó correctamente"
        End If
     
        'Quito el flag para la eliminación del registro
        For Each strClaReg in arrClaReg
            'No quiero eliminar los archivos de instalación de Office
            If Not UCase(strClaReg) = "OFFICE SETUP FILES" And Not UCase(strClaReg) = "COMPRESS OLD FILES" Then
                objReg.DeleteValue HKLM, strClave & strClaReg, strFlag
                If kLOGEXTENDIDO Then
                    If Err = 0 Then
                        Salida "Opción restablecida: " & strClaReg
                    Else
                        Salida "Error: " & Err.Number & " - " & Err.Description & _
                            "Al intentar restablecer la opción " & strClaReg
                        Err.Clear
                    End If
                End If
            End If
        Next
     
        'Borro los logs que crea la utilidad al ejecutarse y para eso necesito
        'detener el servicio "TrustedInstaller"
        ModificaServicio "TrustedInstaller", kFINALIZAR
        strLog = strUnidad & "\Windows\Logs\CBS"
        If (objFS.FolderExists(strLog)) Then
            Set objCarpeta = objFS.GetFolder(strLog)
            For Each objArchivo in objCarpeta.Files
                On Error Resume Next
                Salida "Archivo " & objArchivo.Path & " - " & Unidades(objArchivo.Size) & " eliminado"
                objArchivo.Delete(True)
            Next
        End If
     
        Set objCarpeta = Nothing
        Set objArchivo = Nothing
     
        intEspLibFin = objDisco.FreeSpace - intEsp
        Salida ">>> Tiempo transcurrido: " & TiempoTranscurrido(dtmTiempoFin, Time)
        Salida ">>> Espacio liberado   : " & Unidades(intEspLibFin)
        Salida kESPACIOS
     
    End Sub
    
    Sub UtilidadDism
     
        Dim strErr, strUnidad, strLog
        Dim objArchivo
     
        strUnidad = objShell.ExpandEnvironmentStrings("%SYSTEMDRIVE%")
     
        Salida ">>> Iniciando utilidad DISM"
        dtmTiempoFin = Time
        intEsp = objDisco.FreeSpace
     
        Salida "Ejecutando la utilidad..."
        strErr = objShell.Run("dism.exe /online /cleanup-image /spsuperseded /hidesp", kOCULTAR, kESPERAR)
     
        If strErr <> 0 Then
            Salida ">>> La utilidad DISM finalizó con error"
        Else
            Salida ">>> La utilidad DISM finalizó correctamente"
        End If
     
        'Borro archivo de log que crea la utilidad
        strLog = strUnidad & "\Windows\Logs\DISM\dism.log"
        If (objFS.FileExists(strLog)) Then
            Set objArchivo = objFS.GetFile(strLog)
            On Error Resume Next
            Salida "Archivo " & objArchivo.Path & " - " & Unidades(objArchivo.Size) & " eliminado"
            objArchivo.Delete(True)
        End If
     
        Set objArchivo = Nothing
     
        intEspLibFin = objDisco.FreeSpace - intEsp
        Salida ">>> Tiempo transcurrido: " & TiempoTranscurrido(dtmTiempoFin, Time)
        Salida ">>> Espacio liberado   : " & Unidades(intEspLibFin)
        Salida kESPACIOS
     
    End Sub
    
    Sub UtilidadVssadmin
     
        Dim strErr
     
        Salida ">>> Iniciando utilidad VSSADMIN"
        dtmTiempoFin = Time
        intEsp = objDisco.FreeSpace
     
        Salida "Ejecutando la utilidad..."
        strErr = objShell.Run("vssadmin.exe Delete Shadows /For=" & objDisco.DriveLetter & ": /All /Quiet", kOCULTAR, kESPERAR)
     
        If strErr <> 0 Then
            Salida ">>> La utilidad VSSADMIN finalizó con error"
        Else
            Salida ">>> La utilidad VSSADMIN finalizó correctamente"
        End If
     
        intEspLibFin = objDisco.FreeSpace - intEsp
        Salida ">>> Tiempo transcurrido: " & TiempoTranscurrido(dtmTiempoFin, Time)
        Salida ">>> Espacio liberado   : " & Unidades(intEspLibFin)
        Salida kESPACIOS
     
    End Sub
    
    Sub UtilidadWevtutil
     
        Dim intInd, intContC, intContE
        Dim strErr
        Dim objCmd
        Dim dicLogs        :    Set dicLogs = CreateObject("Scripting.Dictionary")
     
        intInd = 0
        intContC = 0
        intContE = 0
     
        Salida ">>> Iniciando utilidad WEVTUTIL"
        dtmTiempoFin = Time
     
        Set objCmd = objShell.Exec("cmd /c wevtutil el")
     
        Do While Not objCmd.StdOut.AtEndOfStream
            dicLogs.Add intInd, objCmd.StdOut.ReadLine()
            intInd = intInd + 1
        Loop
     
        intEsp = objDisco.FreeSpace
        Salida "Ejecutando la utilidad..."
     
        For intInd = 0 to dicLogs.Count - 1
            strErr = objShell.Run("wevtutil cl " & dicLogs.Item(intInd), kOCULTAR, kESPERAR)
            If strErr = 0 Then
                If kLOGEXTENDIDO Then Salida "Se vació el registro: " & dicLogs.Item(intInd)
                intContC = intContC + 1
            Else
                If kLOGEXTENDIDO Then Salida "No pudo vaciarse el registro: " & dicLogs.Item(intInd)
                intContE = intContE + 1
            End If
        Next
     
        intEspLibFin = objDisco.FreeSpace - intEsp
        Salida "De " & dicLogs.Count & " registros, " & intContC & " fueron vaciados correctamente"
        Salida "(No pudieron vaciarse " & intContE & " registros)"
        Salida ">>> Finalizó la ejecución de la utilidad WEVTUTIL"
        Salida ">>> Tiempo transcurrido: " & TiempoTranscurrido(dtmTiempoFin, Time)
        Salida ">>> Espacio liberado   : " & Unidades(intEspLibFin)
        Salida kESPACIOS
     
    End Sub

     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...