15

毎日の IIS ログをまとめて月ごとに圧縮するスクリプト/バッチを作成したいと考えています。

ex yymmdd .logの形式の ex080801.log

ex080801.log - ex080831.log は圧縮され、ログ ファイルは削除されます。

これを行う理由は、負荷の高いサイトでは 1 日のログ ファイルが 500 MB から 1 GB になる可能性があるため、それらを圧縮して 98% 圧縮し、実際のログ ファイルをダンプするためです。ログファイルの分析には webtrend を使用しており、zip ファイルに読み込むことができます。

これをスクリプト化する方法についてアイデアを持っている人はいますか、またはコードを共有しても構わないと思っていますか?

4

7 に答える 7

12

ファイルを圧縮するには、コマンド ライン ツールが必要です。無料で使いやすい7-Zipをお勧めします。自己完結型のコマンド ライン バージョン (7za.exe) は、最も移植性の高い選択肢です。

ログ ファイルを圧縮して後で削除する 2 行のバッチ ファイルを次に示します。

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

最初のパラメーターは 4 桁の年と月で、2 番目のパラメーターはログを含むディレクトリへのパスです。例えば:ziplogs.bat 0808 c:\logs

より複雑にすることもできます (つまり、ファイル名を検索してアーカイブする月を決定します)。正規表現を使用して入力テキストを検索するための Windows FINDSTRコマンドを確認することをお勧めします。

于 2008-08-27T06:00:40.507 に答える
6

これは、David のスクリプトを基本的に適応させ、先月のログを圧縮して移動し、元のログ ファイルを削除するスクリプトです。これは、Apache ログにも適用できます。これに関する唯一の問題は、DOS の日付関数が曜日を出力する場合、置換コマンドを編集する必要がある場合があることです。7-zip もインストールする必要があります。

IISlogslite をダウンロードすることもできますが、毎日のファイルが 1 つの zip ファイルに圧縮されますが、これは役に立ちませんでした。同じことを行う vbscript が Web に浮かんでいます。

-------------------------------------------------- -----------------------------------
@エコーオン

:: 名前 - iislogzip.bat
:: 説明 - サーバー ログ ファイル マネージャー
::
:: 歴史
:: オーソリ変更日
:: 2008 年 8 月 27 日 David Crow オリジナル (スタック オーバーフローで発見)
:: 2008 年 10 月 15 日 AIMackenzie スリム化されたコマンド


:: =============================================== ========
:: 変数とパラメータの設定
:: =============================================== ========
:: 日付と時刻の変数を生成する

月を設定=%DATE:~3,2%
年を設定=%DATE:~8,2%

::前月を取得してエッジの状態を確認

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

yymm=%年%%先月%に設定

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


:: =============================================== ========
:: ログファイルパスに変更
:: =============================================== ========
cd /D %logpath%

:: =============================================== ========
:: 先月の IIS ログ ファイルを圧縮し、圧縮したファイルをアーカイブに移動します
:: 古いログを削除します
:: =============================================== ========
%zippath% a -tzip ex%yymm%-logs.zip %logpath%\ex%yymm%*.log
move "%logpath%\*.zip" "%arcpath%"
del %logpath%\ex%yymm%*.log
于 2008-11-11T11:29:10.720 に答える
2

次のようなスクリプトを使用します。Gzip は cygwin プロジェクトからのものです。代わりに zip ツールを使用するように構文を変更できると確信しています。「skip」引数は、アーカイブしないファイルの数です。「現在の」ディレクトリに 11 日間保持されます。

@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
于 2008-08-29T18:56:50.347 に答える
1

DotNetZipからコマンドラインユーティリティパッケージを入手して、スクリプトからzipを作成するためのツールを入手できます。コマンドラインで実行され、zipファイルにファイルまたはディレクトリを追加するZipit.exeと呼ばれる素敵な小さなツールがあります。それは速く、効率的です。

より良いオプションは、PowerShell内から単にzipを実行することです。

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()
于 2009-01-04T04:19:07.500 に答える
1

この PowerShell スクリプトを使用します: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6

7-zip を使用し、ファイルを削除する前に検証します。

于 2014-02-19T09:27:26.793 に答える
1

http://blogs.msdn.com/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspxから借りた zip 関数

これは、驚異的に機能するpowershellの回答です。

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)
}
于 2010-03-02T20:00:01.973 に答える
0

正規表現はトリックを行います... perl / python / phpスクリプトを作成して、あなたのために仕事をします..
Windowsバッチファイルは正規表現を実行できないと確信しています。

于 2008-08-27T04:18:41.330 に答える