- ベストアンサー
平日出力されるログを月次処理で圧縮したい
平日出力されるログを月次処理で圧縮したい \\server\log\20100101\%computername%.log ~~~~~~~~~~~~~~~~~~~~~~~ \\server\log\20100131\%computername%.log \\server\log\20100201\%computername%.log ~~~~~~~~~~~~~~~~~~~~~~~ \\server\log\20100228\%computername%.log 上記のようなイメージで、ログが日々たまっていきます。 (土日の日付は出力されない) このログをBATを登録しタスクマネージャを使って 毎月ZIPに圧縮し、元ファイル+フォルダは削除したいと 考えています。 どなたか参考になるURLご教授いただけないでしょうか? 宜しくお願いします。 下記はこちらで調べたURLですが、スクリプトだったのであきらめました。 http://sawano.members.icraft.jp/wp/2008/08/30/590.html
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#昨夜からいろいろと WEBサーフィン してやっと書き上げたら、識者さんからのご回答が付いているようですが、せっかく書きましたので、投稿させていただきます。 <(_ _)> #先ずお断りしておきますが、私は「バッチ超初心者ド級素人」です。 (^凹^) http://okwave.jp/qa/q5827049.html #3 >下記はこちらで調べたURLですが、 >スクリプトだったのであきらめました。 リンク先 を拝見いたしましたが、とてもややこしそうでしのたので、一から自分で考えてみました。 先ず「ZIPに圧縮」につきましては、「+Lhaca」を使ってみます。 1)「+Lhaca」を ダウンロード、インストール します。 http://www.forest.impress.co.jp/lib/arc/archive/archiver/pluslhaca.html 2)Lhaca.exe を起動します。 3)[圧縮] - [圧縮先] を「ファイルと同じ場所」に、[フォルダを作ってその中に解凍] の チェック を外し、[圧縮形式] を「ZIP」に設定し、必要に応じて他の オプション を設定します(添付画像)。 4)[+Lhaca Version0.76 設定 ~~] の ウィンドウ を閉じます。 5)以上で、コマンドライン から "C:\Program Files\Lhaca\Lhaca.exe" "D:\hoge" を実行すると、"D:\hoge.zip" という「圧縮(zip形式)フォルダ」(中身は "D:\hoge" と同じ)ができます。 次に、「元ファイル+フォルダは削除」につきましては、下記の段取りでいかがでしょうか? @echo off rem 【1】「前月次」("201003")の数字文字列を取得する。 set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 rem 【2】「\\server\log\」直下に、作業フォルダ("2010年03月")を作成する。 set RootFolder=\\server\log\ set MoveFolder=%LASTMONTH:~0,4%年%LASTMONTH:~-1,2%月 md %RootFolder%%MoveFolder% rem 【3】圧縮対象("201003~" で始まる フォルダ)を 作業フォルダに移動する。 pushd %RootFolder% for /d %%f in (%LASTMONTH%*) do move %%f %MoveFolder% rem 【4】「ZIPに圧縮し、元ファイル+フォルダは削除」 "C:\Program Files\Lhaca\Lhaca.exe" .\%MoveFolder% rd /s /q %MoveFolder% 初心者の言い訳がてらに、少々説明を加えておきます。。。 ・【1】は http://it-is-it.net/CMD/%B5%A1%C7%BD%CA%CC/%C6%FC%BB%FE%B7%D7%BB%BB/#yc8cac3f からの丸写しです。 ・【3】の時点で %RootFolder% に移動しようとすると「cd」や「chdir」では「CMD では UNC パスは現在のディレクトリとしてサポートされません。」という エラー が表示されて移動できませんでしたので、 http://d.hatena.ne.jp/bontaki/20060722/1153535591 を参考に「pushd ~~」としました。 ・「for ~~ move ~~」で フォルダ・ファイル を移動しようとしたときに、「セキュリティ」や「共有」の設定により「アクセスできませんでした」というような エラー が出ましたが、2つとも設定すると動きました。 ・【4】の「.\%MoveFolder%」の部分につきましては、「+Lhaca」の設定によっては エラー が表示されるかも知れませんが、「"」で囲むと回避できるかも知れません。 ・また、「%RootFolder%%MoveFolder%」などとすると、ちゃんと動きませんでしたので、「.\」により、カレントディレクトリ を相対指定しました。 なお、操作環境・ネットワーク環境 によっては動かないかも知れませんので、飽くまでご参考までにご覧ください。
その他の回答 (3)
- DOUGLAS_
- ベストアンサー率74% (397/534)
#2・3 DOUGLAS_ です。 #先ずお断りしておきますが、私は「バッチ超初心者ド級素人」であるばかりか、私の環境には、いわゆる「サーバー」がありませんので、ホームネットワーク 上の別の パソコン の ネットワークアドレス \\{パソコン名}\{ドライブ名}\log で試行しております。 お恥ずかしい話、私は、サーバー というものを扱ったことがありませんので、この時点で『ダメ』でしたら、つまり、「サーバー」と「ホームネットワーク」では全然異なるというようなことでしたら、すべての回答を お見捨てください。 【1】私が試したこと。 1)#2 の コード の内 set RootFolder=\\server\log\ の行を set RootFolder=\\{パソコン名}\{ドライブ名}\log\ に書き換えて、「boge.bat」という ファイル名 で、私の パソコン の デスクトップ に保存しました。 2)「\\{パソコン名}\{ドライブ名}\log\」の配下に「20100101」~「20100415」の105個の フォルダ を作り、それぞれの フォルダ の中に「%computername%.log」という テキストファイル を作りました。 3)デスクトップ の「boge.bat」を ダブルクリック しました。 4)「\\{パソコン名}\{ドライブ名}\log\」の配下にあった「20100301」~「20100331」の31個の フォルダ がなくなり、替わりに「2010年3月.zip」という「圧縮(zip 形式)フォルダ」ができました。 5)エクスプローラ で「2010年3月.zip」を ダブルクリック すると、「+Lhaca」の「解凍」の規則に従って「2010年3月.zip」を解凍した フォルダ が表示されました。 6)その中を見てみると、それぞれに「%computername%.log」という テキストファイル が存在する「20100301」~「20100331」の31個の フォルダ が入っていました。 【2】さて、どこが問題と思われるでしょうか?
お礼
たびたびレス感謝です。 #先ずお断りしておきますが、私は「バッチ超初心者ド級素人」である 大変失礼しました。DOUGLASさんの環境でうまくいくということなので GW前に実装したかった焦りもありすがってしまいました。 なんとか実装出来るよう頑張ってみます。
- DOUGLAS_
- ベストアンサー率74% (397/534)
#2 DOUGLAS_ です。 書き漏らしがありましたので追加いたします。 【3】で「pushd」で、自動的にネットワークドライブ接続した後に、「popd」で元のディレクトリに戻ると共に、ネットワークドライブを解放しておかないと、マイ コンピュータ の中に ネットワーク ドライブ がそのまま残ってしまいますので、【4】の一番最後に、 popd を追加してください。 大変、失礼いたしました。 <(_ _)>
補足
補足いただき有難うございます。 早速今日、仕込んでみましたが、下記のようになってしまいました。 ZIPの中身 ------ 20100401\%computername%.log 20100402\%computername%.log 20100404\%computername%.log %computername%.log ------ 理想は、ZIPを解凍すると、日付フォルダの中に入る。 20100401\%computername%.log 20100402\%computername%.log 20100403\%computername%.log 20100404\%computername%.log こちらでBATを編集してみましたが、うまくいきませんでした。 また、お時間ありましたらご教授下さい。
- suttanipat
- ベストアンサー率50% (9/18)
http://www.vector.co.jp/soft/winnt/util/se355605.html?site=n ここからVBScriptをダウンロードし、その中のMakeZIP.VBSを作成するバッチファイルと同じフォルダに解凍する。 次のバッチファイルを作成。 @echo off rem -------------------------- rem 年と月の取得 rem -------------------------- set tdate=2010/05/01 set YEAR=%tdate:~0,4% set MONTH=%tdate:~5,2% set /a MONTH=1%MONTH%-100 rem -------------------------- rem 前月の取得 rem -------------------------- if %MONTH% EQU 1 (set /a YEAR=YEAR-1&&set /a MONTH=12&&goto ZIP) if %MONTH% NEQ 1 (if %MONTH% LEQ 9 set /a MONTH=MONTH-1&&goto ZERO) if %MONTH% EQU 10 (set MONTH=09) if %MONTH% GEQ 11 (set /a MONTH=MONTH-1) goto ZIP :ZERO set MONTH=0%MONTH% rem -------------------------- rem ZIP rem -------------------------- :ZIP for /d %%i in (\\server\log\%YEAR%%MONTH%*) do cscript MakeZip.VBS %YEAR%% MONTH%.zip %%i
お礼
レス感謝です。 GW入る前に、実装してみます。 有難うございました。
お礼
レス感謝です。 GW入る前に、実装してみます。 有難うございました。