プロが教えるわが家の防犯対策術!

Windowsのバッチファイルで、定期的に特定の場所にあるフォルダを
削除したいと考えており、以下のような処理を想定しております。
※OSはWindows Server 2008 R2です。

----------------------------------------
@echo off

rem 1,2,3で始まるフォルダを削除する
for /D %%a in ("C:\test\1*") do rmdir /Q /S "%%a"
for /D %%a in ("C:\test\2*") do rmdir /Q /S "%%a"
for /D %%a in ("C:\test\3*") do rmdir /Q /S "%%a"
----------------------------------------

上記のバッチでフォルダの削除自体はうまくいったのですが、
その際、削除したフォルダの情報をWindowsのイベントログに
Informationとして出力したいと考えております。
イベントログの出力結果は全件まとめてでも一件ずつでも良いのですが、
どのように記載すれば実現できるでしょうか?

A 回答 (3件)

No2です。


>今回のようにfor文で対象を検出・削除している処理の中に、eventcreateコマンドを織り込んで結果を出力する方法がわからなかったのです。
>おそらく、deleteコマンドは標準出力がないため、一回ごとに戻り値を取るようなことをしないと実現できないのだろうと考えております。

それはもとの質問と全く関係のないことですよね。
なぜ知りたいことと全く違うことを質問に書いたのでしょうか?

それはさておき、rmdir が成功したときだけeventcreateしたいのであれば、
mdir /Q /S "%%a" && eventcreate ~~
です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
おかげさまで、バッチで想定していた動作をさせることができました。
お手数お掛けし申し訳ありませんでした。

お礼日時:2014/06/27 10:05

管理者権限で eventcreate コマンドを使えば出来ます。


詳しくはコマンドプロンプトで、eventcreate /?

eventcreate /t information /l application /id 1 /d "%%a を削除しました"

とか。
管理者権限でコマンドを実行する方法はわかりますかね?
おそらくタスクスケジューラーからこのバッチファイルを定期実行するんでしょうから、「最上位の特権で実行する」のチェックをオンにする。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。説明不足で申し訳ございません。
eventcreateやタスクスケジューラへの組み込み方法については理解しておりましたが、
今回のようにfor文で対象を検出・削除している処理の中に、eventcreateコマンドを
織り込んで結果を出力する方法がわからなかったのです。
おそらく、deleteコマンドは標準出力がないため、一回ごとに戻り値を取るような
ことをしないと実現できないのだろうと考えております。
もし方法がわかるようでしたらご教授いただけますでしょうか?

お礼日時:2014/06/24 12:07

eventlogを操作するコマンドレットが powershell に用意されています(添付画像)ので利用してはどうでしょうか。


New-EventLog
Write-EventLog
を使用すればいいと思います。
事例の記述もありますのでマイクロソフト Technet サイトを参照してください。
http://technet.microsoft.com/ja-jp/library/hh849 …
http://technet.microsoft.com/ja-jp/library/hh849 …
「バッチで削除したフォルダをイベントログに」の回答画像1
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ご紹介頂いたサイトを参考にしてPowershellでもできることを確認できました。
ただ、今回は対象に.Net Framework3.5を追加していない環境も存在しており、
Powershellの一部のClassが参照できなかったため、通常のバッチで実行することとしました。

お礼日時:2014/06/24 11:55

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

このQ&Aを見た人はこんなQ&Aも見ています