• ベストアンサー

ご教授ください。(Windows バッチコマンド)

よろしくお願いします。 ここのところ質問ばかり申し訳ありません。 自分の頭の悪さに泣いております・・・。 以下のバッチファイル(Windows2000)を 作成できればと検討中です。 もし宜しければご教授願えますでしょうか。 さっぱり分かりません。 Q1. あるアプリケーションが出力するログがあります。 このログを2世代管理したいと考えています。 1日目に出力されたログを abc.log とすると、 2日目のアプリケーションの起動時にこの「abc.log」 を「abc.日付」にコピーし、「abc.log」の内容を クリアし、2日目のアプリケーションのログを 書き出せるようにする。 3日目のアプリケーションの起動時に「abc.log」を 「abc.日付」にコピーし、「abc.log」の内容の クリアと2日目に作成した「abc.日付」(内容は1日目 のログ)を削除する。 Q2. この曜日ならこの処理をする。 というように、曜日で処理を分岐させる。 どうぞ宜しくお願い致します。

  • nao-k
  • お礼率92% (695/752)

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

個人的には、WSHを使った方が書きやすいと思いますが、バッチの小ネタをいくつか。 1)日付文字列の作成: SET TODAY=%DATE:~-10,-6%%DATE:~-5,-3%%DATE:~-2% ECHO %TODAY% %DATE%の出力はロケールに依存するので、調整が必要かも。 2)日付の最も旧いファイル名の取得: FOR /F "usebackq" %%f IN (`dir /b/o:-d a.log.*`) DO SET OLDLOG=%%f ECHO %OLDLOG% 3)ファイルの内容を空にする: COPY /y NUL a.log 4) 曜日の取得 ……はあまり良い手が思いつかない。%DATE%に含まれていれば簡単ですが。 cygwinのlogrotateとか使った方が手っ取り早いかも。

nao-k
質問者

お礼

osamuy さん、アドバイスありがとうございます。 まさに、求めていた回答です。 ありがとうございました。 曜日の取得は、VBSにて解決しました。 cygwinを少し検索してみましたが、これは 購入しないと得られないものなのでしょうか?

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.4

>曜日の取得は、VBSにて解決しました 日本語Windows2000であれば、%DATE:~0,1% で漢字で曜日が得られますので、 if %DATE:~0,1%==日 (日曜日の処理。。。) のようにすればいいかと思います。 (WinXP以降だと設定変更しないと曜日は%DATE%に付かないのですが) 一般的には、当日日付けだけでいいならバッチだけで書いて、前日日付けが必要など日時計算がからんだら、計算の所だけVBSを使うのが良いかと思います。コピー・リネーム・削除はバッチが楽、日時計算はVBSが楽だからです。 >cygwinを少し検索してみましたが、これは購入しないと得られないものなのでしょうか? フリーソフトですが、この程度の処理であれば必要ないです。unix/linux環境とWindows環境が混在していて、全部bashスクリプトで統一したいと言うことなら入れれば良いと思います。

nao-k
質問者

お礼

notnot さん、ご回答ありがとうございます。 確かに、今日Windows2000でdate/tを実行したら 曜日がついていました。 考えているときには、手元にWinXPしかなかったので、 そこで打って出てきたもので考えていました。 >一般的には、当日日付けだけでいいならバッチだけで書いて、前日日付けが必要など日時計算がからんだら、計算の所だけVBSを使うのが良いかと思います。コピー・リネーム・削除はバッチが楽、日時計算はVBSが楽だからです。 そういうことになっているんですね。 ありがとうございます。

nao-k
質問者

補足

ポイント付加できず申し訳ありません。 もう一人付加できるサービス内容なら良いのですが・・・。 今後とも宜しくお願い致します。

回答No.2

Q2はちょっと妙案が思いあたりませんが、Q1に関しては仕様を変更すれば簡単にできます。 (例) 当日のログファイル名を「abctoday.log」 昨日の分を「abcyestd.log」とします。 アプリケーションを起動する前にバッチファイルで 当日のファイルを昨日の分に上書きしてやるだけです。 さらに3日分、4日分と増やす事も可能です(実際職場でそのような管理をしたことがあります)。

nao-k
質問者

お礼

shironekoxxx さん、アドバイスありがとうございます。 確かに、おっしゃるとおりです。 「仕様変更」という考えが浮かびませんでした。 教えていただいた方法で単純に解決しました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

dosレベルのバッチファイルでは無理かと思います。 VBSなどで処理を記述して、バッチファイルで起動させる方が良いのでは無いかと思います。

nao-k
質問者

お礼

hana-hana3 さん、ご回答ありがとうございます。 曜日の取得については、VBSにて解決しました。

関連するQ&A

  • コピーバッチの作成について。

    コピーバッチの作成について。 現在フォルダのコピーバッチを作成しようと考えています。 ただ、未熟なもので、なかなか難しく、できればご教授していただければと思い、 投稿させていただきました。 尚、現在作成したいコピーバッチは下記となっています。 1. テストPC01に不定期に配置されるフォルダを、テストPC02上にコピーする。 (フォルダ名はTEST20100919という形で、TESTのみ固定で日付が毎回変動する) 1.5 フォルダがない場合はバッチファイル終了。 2. コピー後に、テストPC02の特定のサービスを停止する。 3. テストPC02にコピーした、TEST20100919をTESTにリネームする。 4. 2.で停止したサービスを起動する。 5. テストpc01のコピー元フォルダを削除する。 (また、上記のバッチで実行された内容をログに吐き出させたいと考えています) このような処理をバッチファイルで行うことは可能でしょうか。 可能でしたら、お手数ですがご教授願えないでしょうか。 よろしくお願いいたします。

  • バッチ処理についてお伺い致します。

    既存のテキストファイルの内容をコピーし、 「「給与データ.00001_日付時間.DAT」」というファイル名称に変換したファイルを バッチ処理にて作成する事は可能でしょうか。 ※日付時間は作成した日付時間です。

  • Windowsバッチでの作成について困っております。

    当方、大学2年の学生です。 現在履修しています情報系の講義で、連休の課題として 「WindowsのDosバッチ作成」の課題が出ました。 課題の期限は16日(金)です。 課題の内容は、 「ファイルを自動で削除するバッチの作成」です。 あるフォルダにたまったファイルを、月に一回自動削除するもので、 削除対象のファイルは削除日より一年以上経過している全ファイルです。 例えば、削除日が2009年10月10日だとすると、削除対象ファイルは 2008年10月10日以前のファイルになります。 *ファイル名は任意ですが、例えば「Sample20090101.log」のようにしようと思ってます。 また削除した際には、削除したファイル名と日付をログに残します。 ================================ 恐らく大まかな処理の流れとしては、 1.まず、ファルダにあるファイルをリストする。    フォルダはパスを変数で指定し、ファイルはdirを使って表示する形になるのかなと思います。 2.次にその中で削除対象となるファイル(削除日より一年以上経過しているという条件で分岐させる)を検索する。 3.次に、削除対象のファイルを削除する。 4.最後に削除したファイル名と日付のあるログを出力する。 以上のようになるかと思います。   *1~3の処理を一つのバッチで、4のログを出力用にさらにもうひとつバッチをつくろうかと思います。   ネットで検索してみますと、このような処理をDosで作るのは難しい。。。というような意見が多く、 自分もWindowsDosバッチの作成は経験がなく、困っています。 どなたかご教示いただければと存じます。よろしくお願いします。

  • rdコマンドでログ出力方法

    バッチファイルのrdコマンドでログを出力させたいのですが、ログが出力されません エラー出力は出力されるのですが、標準出力が出力されず、困っています 以下フォルダ構成 -sample.bat -test -log.txt 以下、バッチのサンプルです sample.bat rd /s /q test >> log.txt testフォルダは削除されるのですが、ログに処理内容が記述されず困っています。 また、エラー出力 rd /s /q test2 >> log.txt 2>&1 とするとエラー結果がlog.txtに出力されます。 正常に処理されたときの出力方法ご存知の方いらっしゃいましたらご教授ください よろしくお願いいたします

  • 【Windows】バッチスクリプトについて

    FTPサーバからデータを取得するバッチスクリプトを構成しようと思っています。 データ(ファイル)を2回取得し、1回目と2回目のデータ(ファイル)が同じかどうかのチェックし FTPサーバ上のデータ(ファイル)を削除するスクリプトを 以下手順で作成しようと思います。 1.環境変数の設定。 2.startログ出力 3.環境設定ファイル有無チェック 4.環境設定ファイル正当性チェック 5.環境設定ファイルから値の抽出 6.データ受信(1回目)パラメータファイル作成 7. データ受信処理の実行 8.データ受信処理の結果確認 9.作業フォルダ作成 10. データ受信(2回目)パラメータファイル作成 11.7~8と同じ 12.データチェック 13.FTPデータ削除用パラメータファイル作成 14.FTPデータ削除処理 15.FTPデータ削除処理結果の確認 16.rcv.dat作成 17.エラー処理 18.オリジナルデータをバックアップ 19.パラメータファイルをバックアップ 20.ログファイルをバックアップ 21.直近n回分を残して、バックアップファイルを削除 22.後処理(処理データのクリア)※念のため 23.endログ出力 ご参考までに、大まかなスクリプトをご教示いただければと思います。 とても大雑把な質問ではございますが、宜しくお願い致します。

  • バッチへ値を返す

    バッチファイルからVB作成のEXEファイルを起動させて、EXEの結果をバッチファイルに出力するにはどのような処理をすればよいでしょうか?

  • 削除バッチ方法を教えてください

    Aフォルダの中のあるファイルのみを残し、他のファイルを削除するバッチorDOSコマンドを教えてください? ログファイルを削除するために上記のような仕様でバッチ作成したいのですが、いろいろと調べていますが、わかりません。 ファイル名を見て削除したいと考えています。 ログのファイル形式は、年日付時刻ABCファイルとなり、当日と前日のログだけを残して、他のログを削除したいのですが、、、 宜しくお願いします。

  • バッチファイルにおけるコマンドの引数

    バッチファイルの中で曜日判定で処理内容を変えたいのですが DOSコマンドのdateでは曜日を出力できませんでした。 そこで、Services for UNIX 3.5をインストールし、UNIXのdateコマンドを使って曜日判定をしようとしたのですが、以下のようにエラーに なってしまいます。 ===バッチの中身== rem 曜日判定 set wk=c:\SFU\bin\date +%a IF %wk% EQU "日” call batch_1.bat  ・・・ ・・・ ====== 上記をコマンドプロンプトで実行しますと date: illegal time format usage: date [-u] [-r seconds] [+format] date [-u] -t [[[[[CC]yy]mm]dd]HH]MM[.SS] [+format] date [-u] [+format] mmddHHMM[yy] +aの使い方が誤っています。 ※ちなみコマンド単体で実行すると正常です。 c:\SFU\bin\date +%a 水

  • バッチファイルの書き方

    Linux上で実行するバッチファイルを作っています。 runというファイル名で、中には、  sudo ./GUItask とだけ書かれている、GUItaskというアプリケーションを実行するバッチファイルです。 (./runとコンソール上で打って使うつもりです) ここで、 アプリケーションが起動した時間と終了した時間を記録したいので、  /bin/date >> log  echo "起動" >> log  sudo ./GUItask  /bin/date >> log  echo "終了" >> log と書きました。 これで、logというファイルに、  2009年2月3日火曜日12:12:43 JST  起動  2009年2月3日火曜日12:15:43 JST  終了 などと書かれるようになりました。 これを、  2009年2月3日火曜日12:12:43 JST 起動  2009年2月3日火曜日12:15:43 JST 終了 のように、文字列を同じ行に書きたいのですが、 どのように記述したらよいでしょうか。

  • SQLをバッチで実行

    掲題の件で少し教えていただきたいことがあります。 バッチファイルでSQLPLUSを起動し、 @XXXXXXXXX.SQL >> XXX.log(バッチのログ)と 実行するのですが、このSQL文がインサート文や アップデート文など通常のSQL文だと バッチでのリダイレクションの結果に XX行作成されました。とかXX行更新されましたとか 出力されると思うのですが、 実行するSQL文の中でさらに、 @XXXXXXXXX.SQL と記述していると どのようにログファイルに出力されますか? XX行作成されました。とかXX行更新されましたとか が出るとうれしいのですが… わかりにくい質問かもしれませんがお願いいたします。

専門家に質問してみよう