Pregunta

Me gustaría escribir una secuencia de comandos por lotes que se amontonan en mi diario registros de IIS y zip por mes.

ex080801.de registro que está en el formato de exaammdd.registro de

ex080801.registro - ex080831.tronco se zip y los archivos de registro eliminado.

La razón por la que hacemos esto es porque en un pesado sitio un archivo de registro para un día podría ser de 500 mb a 1 gb así que nos postal de ellos hasta que los comprime en un 98% y volcar el real archivo de registro.Utilizamos webtrend para analizar los archivos de registro y es capaz de leer en un archivo zip.

¿Alguien tiene alguna idea sobre cómo guión de esta o estaría dispuesto a compartir algo de código?

¿Fue útil?

Solución

Usted necesitará una herramienta de línea de comandos zip de los archivos.Recomiendo 7-Zip que es gratis y fácil de usar.La auto-contenida versión de línea de comandos (7za.exe) es el más portátil de elección.

He aquí un dos por lotes de la línea fichero zip de los archivos de registro y eliminar después de:

7za.exe a -tzip ex%1-logs.zip %2\ex%1*.log
del %2\ex%1*.log

El primer parámetro es el 4 dígitos para el año y el mes, y el segundo parámetro es la ruta de acceso al directorio que contiene los archivos de registro.Por ejemplo: ziplogs.bat 0808 c:\logs

Es posible obtener más elaborada (es decir,la búsqueda de los nombres de archivo para determinar en qué meses para archivar).Usted puede ser que desee comprobar hacia fuera el de Windows FINDSTR comandos para la búsqueda de entrada de texto con expresiones regulares.

Otros consejos

Aquí está mi script que básicamente se adapta a David, y cremalleras en marcha el pasado mes de registros, mueve y elimina los archivos de registro originales.esto puede ser adaptado para los logs de Apache demasiado.El único problema con esto es que usted puede necesitar para editar el reemplazar comandos, si su fecha DOS salidas de función de la fecha de la semana.Usted también necesitará instalar 7-zip.

También puede descargar IISlogslite pero comprime cada día de archivo en un único archivo zip que yo no lo encuentre útil.Hay un vbscript flotando alrededor de la web que hace la misma cosa.

-------------------------------------------------------------------------------------
@echo on

:: Name - iislogzip.bat
:: Description - Server Log File Manager
::
:: History
:: Date         Authory      Change
:: 27-Aug-2008  David Crow   Original (found on stack overflow)
:: 15-Oct-2008  AIMackenzie  Slimmed down commands


:: ========================================================
:: setup variables and parameters
:: ========================================================
:: generate date and time variables

set month=%DATE:~3,2%
set year=%DATE:~8,2%

::Get last month and check edge conditions

set /a lastmonth=%month%-1
if %lastmonth% equ 0 set /a year=%year%-1
if %lastmonth% equ 0 set lastmonth=12
if %lastmonth% lss 10 set lastmonth=0%lastmonth%

set yymm=%year%%lastmonth%

set logpath="C:\WINDOWS\system32\LogFiles"
set zippath="C:\Program Files\7-Zip\7z.exe"
set arcpath="C:\WINDOWS\system32\LogFiles\WUDF"


:: ========================================================
:: Change to log file path
:: ========================================================
cd /D %logpath%

:: ========================================================
:: zip last months IIS log files, move zipped file to archive 
:: then delete old logs
:: ========================================================
%zippath% a -tzip ex%yymm%-logs.zip %logpath%\ex%yymm%*.log
move "%logpath%\*.zip" "%arcpath%"
del %logpath%\ex%yymm%*.log

Utilizamos un script como el siguiente.Gzip es desde el cygwin proyecto.Estoy seguro de que podría modificar la sintaxis para el uso de una postal de la herramienta en su lugar.El "salto" argumento es el número de archivos que no se archive off -- seguimos 11 días en el 'actual' en el directorio.

@echo off
setlocal
For /f "skip=11 delims=/" %%a in ('Dir D:\logs\W3SVC1\*.log /B /O:-N /T:C')do move "D:\logs\W3SVC1\%%a" "D:\logs\W3SVC1\old\%%a"
d:
cd "\logs\W3SVC1\old"
gzip -n *.log
Endlocal
exit

Usted puede agarrar las utilidades de línea de comandos del paquete de DotNetZip para obtener las herramientas para crear cremalleras de secuencias de comandos.Hay una bonita herramienta llamada Zipit.exe que se ejecuta en la línea de comandos, agrega los archivos o directorios para archivos zip.Es rápido, eficiente.

Una mejor opción podría ser simplemente hacer la calma desde dentro de PowerShell.

function ZipUp-Files ( $directory )
{

  $children = get-childitem -path $directory
  foreach ($o in $children) 
  {
    if ($o.Name -ne "TestResults" -and 
        $o.Name -ne "obj" -and 
        $o.Name -ne "bin" -and 
        $o.Name -ne "tfs" -and 
        $o.Name -ne "notused" -and 
        $o.Name -ne "Release")
    {
      if ($o.PSIsContainer)
      {
        ZipUp-Files ( $o.FullName )
      }
      else 
      {
        if ($o.Name -ne ".tfs-ignore" -and
           !$o.Name.EndsWith(".cache") -and
           !$o.Name.EndsWith(".zip") )
        {
          Write-output $o.FullName
          $e= $zipfile.AddFile($o.FullName)
        }
      }
    }
  }
}


[System.Reflection.Assembly]::LoadFrom("c:\\\bin\\Ionic.Zip.dll");

$zipfile =  new-object Ionic.Zip.ZipFile("zipsrc.zip");

ZipUp-Files "DotNetZip"

$zipfile.Save()

Prestado postal de la función de http://blogs.msdn.com/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx

Aquí es powershell respuesta que funciona a las mil maravillas:

param([string]$Path = $(read-host "Enter the path"))
function New-Zip
{
    param([string]$zipfilename)
    set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    (dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
    param([string]$zipfilename)

    if(-not (test-path($zipfilename)))
    {
        set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
        (dir $zipfilename).IsReadOnly = $false  
    }

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)

    foreach($file in $input) 
    { 
            $zipPackage.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
    }
}
$FilesToZip = dir $Path -recurse -include *.log
foreach ($file in $FilesToZip) {
New-Zip $file.BaseName
dir $($file.directoryname+"\"+$file.name) | Add-zip $($file.directoryname+"\$($file.basename).zip")
del $($file.directoryname+"\"+$file.name)
}

Podemos utilizar esta secuencia de comandos de powershell: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6

Utiliza 7-zip y verifys los archivos antes de eliminarlos

Regex hará el truco...crear un perl/python/php script para hacer el trabajo para usted..
Estoy bastante seguro de archivo por lotes de windows no se puede hacer regex.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top