アプリ版:「スタンプのみでお礼する」機能のリリースについて

平日出力されるログを月次処理で圧縮したい

\\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/59 …

A 回答 (4件)

http://www.vector.co.jp/soft/winnt/util/se355605 …
ここから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

参考URL:http://www.vector.co.jp/soft/winnt/util/se355605 …
    • good
    • 0
この回答へのお礼

レス感謝です。
GW入る前に、実装してみます。
有難うございました。

お礼日時:2010/04/22 23:13

#昨夜からいろいろと WEBサーフィン してやっと書き上げたら、識者さんからのご回答が付いているようですが、せっかく書きましたので、投稿させていただきます。


  <(_ _)>
#先ずお断りしておきますが、私は「バッチ超初心者ド級素人」です。
  (^凹^)
http://okwave.jp/qa/q5827049.html  #3

>下記はこちらで調べたURLですが、
>スクリプトだったのであきらめました。
 リンク先 を拝見いたしましたが、とてもややこしそうでしのたので、一から自分で考えてみました。


 先ず「ZIPに圧縮」につきましては、「+Lhaca」を使ってみます。

1)「+Lhaca」を ダウンロード、インストール します。
http://www.forest.impress.co.jp/lib/arc/archive/ …
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%F …
からの丸写しです。
・【3】の時点で %RootFolder% に移動しようとすると「cd」や「chdir」では「CMD では UNC パスは現在のディレクトリとしてサポートされません。」という エラー が表示されて移動できませんでしたので、
http://d.hatena.ne.jp/bontaki/20060722/1153535591
を参考に「pushd ~~」としました。
・「for ~~ move ~~」で フォルダ・ファイル を移動しようとしたときに、「セキュリティ」や「共有」の設定により「アクセスできませんでした」というような エラー が出ましたが、2つとも設定すると動きました。
・【4】の「.\%MoveFolder%」の部分につきましては、「+Lhaca」の設定によっては エラー が表示されるかも知れませんが、「"」で囲むと回避できるかも知れません。
・また、「%RootFolder%%MoveFolder%」などとすると、ちゃんと動きませんでしたので、「.\」により、カレントディレクトリ を相対指定しました。

 なお、操作環境・ネットワーク環境 によっては動かないかも知れませんので、飽くまでご参考までにご覧ください。
「平日出力されるログを月次処理で圧縮したい」の回答画像2
    • good
    • 0
この回答へのお礼

レス感謝です。
GW入る前に、実装してみます。
有難うございました。

お礼日時:2010/04/22 23:14

#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を編集してみましたが、うまくいきませんでした。
また、お時間ありましたらご教授下さい。

補足日時:2010/04/26 18:59
    • good
    • 0

#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】さて、どこが問題と思われるでしょうか?
    • good
    • 0
この回答へのお礼

たびたびレス感謝です。

#先ずお断りしておきますが、私は「バッチ超初心者ド級素人」である
大変失礼しました。DOUGLASさんの環境でうまくいくということなので
GW前に実装したかった焦りもありすがってしまいました。
なんとか実装出来るよう頑張ってみます。

お礼日時:2010/04/28 06:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!