バッチで削除したフォルダをイベントログに出力したい

このQ&Aのポイント
  • Windowsのバッチファイルで、定期的に特定の場所にあるフォルダを削除したいと考えております。
  • バッチでフォルダの削除自体はうまくいったのですが、その際、削除したフォルダの情報をWindowsのイベントログにInformationとして出力したいと考えております。
  • イベントログの出力結果は全件まとめてでも一件ずつでも良いのですが、どのように記載すれば実現できるでしょうか?
回答を見る
  • ベストアンサー

バッチで削除したフォルダをイベントログに出力したい

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として出力したいと考えております。 イベントログの出力結果は全件まとめてでも一件ずつでも良いのですが、 どのように記載すれば実現できるでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.3

No2です。 >今回のようにfor文で対象を検出・削除している処理の中に、eventcreateコマンドを織り込んで結果を出力する方法がわからなかったのです。 >おそらく、deleteコマンドは標準出力がないため、一回ごとに戻り値を取るようなことをしないと実現できないのだろうと考えております。 それはもとの質問と全く関係のないことですよね。 なぜ知りたいことと全く違うことを質問に書いたのでしょうか? それはさておき、rmdir が成功したときだけeventcreateしたいのであれば、 mdir /Q /S "%%a" && eventcreate ~~ です。

---yamaori---
質問者

お礼

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

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

管理者権限で eventcreate コマンドを使えば出来ます。 詳しくはコマンドプロンプトで、eventcreate /? eventcreate /t information /l application /id 1 /d "%%a を削除しました" とか。 管理者権限でコマンドを実行する方法はわかりますかね? おそらくタスクスケジューラーからこのバッチファイルを定期実行するんでしょうから、「最上位の特権で実行する」のチェックをオンにする。

---yamaori---
質問者

お礼

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

  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.1

eventlogを操作するコマンドレットが powershell に用意されています(添付画像)ので利用してはどうでしょうか。 New-EventLog Write-EventLog を使用すればいいと思います。 事例の記述もありますのでマイクロソフト Technet サイトを参照してください。 http://technet.microsoft.com/ja-jp/library/hh849768.aspx http://technet.microsoft.com/ja-jp/library/hh849847.aspx

---yamaori---
質問者

お礼

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

関連するQ&A

  • バッチでの任意のフォルダ内の削除について

    お世話になります。 Windows7(x64)で開発をしております。 質問事項を記述致します。 任意のフォルダ内のフォルダ(サブフォルダ含む)及びファイルの削除(下記例ではD:\test内のフォルダ及びファイルの削除)をしたいですが、 どのようにすると良いかご教示いただけますでしょうか。 ネット検索したところ下記コマンドがヒットしましたので試してみましたが、 ------------------------------------------------------------------------------------------------ 1.pushd D:\test 2.del /q *.* 3.for /D %%f in ( * ) do rmdir /s /q "%%f" ------------------------------------------------------------------------------------------------ 3の箇所で下記のエラーメッセージが発生し、削除することが出来ませんでした。 ------------------------------------------------------------------------ %%fの使い方が誤ってます。 ------------------------------------------------------------------------ 恐れ入りますが、ご教示いただけますようお願い申し上げます。 以上です。

  • バッチコマンドでファイル名の一部を参照して削除

    Windows7を使用しています。 バッチコマンドで、C:\新規フォルダ\LOGに作成された“LOG_YYYYMMDD”と言うテキストファイルを30日前を残して全て削除したいと思っています。 その他ファイルやフォルダが混在する可能性があるので”LOG_”がついたフォルダを対象として削除したいのですが、どのようにすれば良いでしょうか? パターンを考えてみましたが、どちらも足りない部分があるようで上手くいきません。 (1)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do if "%%D" LSS "%ANS%" del /s /q %%D  ※(1)のifの"%%D"のままではダメなのは分かるのですが、どのようにしたら良いのか困っています。 (2)for /r C:\新規フォルダ\LOG %%D in (LOG_*.txt) do (   set DELDATE=%%D   if "%DELDATE%" LSS "%ANS%" del /s DELDATE   ) 簡単な解説もいただけると助かります。 宜しくお願いします。

  • コマンドプロンプトでのフォルダ削除

    みなさん、お世話になっています。 さて、質問ですがバッチコマンドでファイルをフォルダごと 削除したいと思っています。 DELではフォルダの中にファイルが残っていると消せないし RMDIRでも、同じでした。 以下のコマンドで試してみました。 OSはXP Proです。 for /f "skip=5" %%f in ('dir /b /o-n') do RMDIR %%f 何か他に削除する方法がありますでしょうか。 よろしくお願いいたします。

  • バッチでイベントログ出力したい

    バッチでイベントログ出力したい Windows2003でバッチファイルにてコマンドを実行し、エラーの場合は イベントログに出力したいと考えています。 ERRORLEVELを判定してエラーなら eventcreate /ID 100 /L system /SO Cmd /T ERROR /D "エラーメッセージ" のようにeventcreateコマンドを実行するようにしています。 この"エラーメッセージ"の部分を実際のコマンド実行時のエラーメッセージを 入れ込みたいのですが複数行入れる方法がないか教えてください。 コマンド 2> file.log のようにエラーを出力してそれをfor文で読み込んでいこうとしたのですが 変数に複数行入れることができず、上手くいきません。 何か良い方法があれば教えてください。

  • CMD バッチファイルで手動だと動くのに

    バックアップ用のバッチファイルを作りました。一つずつコマンドを打つと動くのですが、.batをクリックした場合にうまく動作してくれません。Pauseでエラーメッセージを見ようとしても該当ラインで黒窓が閉じてしまうので詳細は分かりません。以下の3行目で窓が閉じます。意図している動作はフォルダ内のフォルダおよびファイルを削除することです。フォルダは2021-というように年で始まっています。手だと動きます。ここでは書きませんでしたが、そのあとにバックアップが始まります。 cd /d D:\SS_Backup robocopy .\BackupOutput .\Archive *.xlsx /s for /d %G in ("D:\SS_Backup\BackupOutput\202*") do rmdir /s /q "%~G" よろしくお願いいたします。

  • ネットワークドライブのファイル削除

    Win7 Pro 32bit AのPC(test)のSCSIのHDDのsharedフォルダをネットワークドライブ割り当てしています。 BのPCから下記のバッチを実行しています。 pushd \\test\shared\aaaaa\bkup del /F/S/Q *.* for /D %%f in ( * ) do rmdir /S/Q "%%f" xcopy /E/H/R/K/Y "D:\*" \\test\shared\aaaaa\bkup\ 先日、SCSIのHDDの電源がオフになっているのに気付かず、 このバッチを実行してしまいました。 そうすると、デスクトップのpdfやExcelのファイルが全て消えました。 ごみ箱にも入っていません。 ショートカットファイル(.lnk)だけは残っていました。 あと、MSからDLしたsp52782-26155.exeも残っていました。 ファイル復元ソフトで一部は戻ったの良かったですが、このバッチで なぜローカルのデスクトップのファイルが削除されたのでしょうか? 「ネットワーク名が見つかりません」ということでdelは実行されないと思ったのですが。

  • フォルダ構成を保ったままファイルを移動させるバッチ

    http://okwave.jp/qa/q8850069.html このページで 複数のaviファイルが入ったフォルダを読み込んで mp4に変換するバッチ処理の方法を教えていただきました。 これを発展させて、 変換元のaviファイルだけをフォルダ構成を保ったまま 別のフォルダに移動させるバッチ処理を作りたいと考えています。 for /r %1 %%i in (*.MTS) do ( "C:\Program Files\Avidemux 2.6 - 64bits\avidemux_cli" ^ --load "%%~i" --output-format MP4v2 --save "%%~dpni.mp4" --quit move "%%~i" D:\test\ ) のように、moveを入れてみたのですが、 これだとファイルだけが全て上記のフォルダに移動されてしまいます。 http://okwave.jp/qa/q3504077.html for /d %%f in (*) do move %%f .. 恐らくこのページが参考になるのではないかと思うのですが これをどうやって使えば良いか分かりません。 この方法について教えていただけないでしょうか?

  • バッチファイルでフォルダ削除

    C:\dataフォルダに格納されているtest1フォルダ、test2フォルダのように、 testとついたフォルダとその中身をバッチで一括削除したいです。 また削除時は、確認なしで、ダブルクリックをしたら処理を完了させたいです。 素人ながらにネットを検索して、 下記のバッチを作成してみましたが正常に動作しませんでした。 powershell -Command "Remove-Item -Path c:\data\test* -Recurse" 可能であればコマンドプロンプトかpowershellでフォルダを削除できるバッチファイルをご教示下さい。 お手数をおかけしますが、よろしくお願いします。

  • フォルダごとのファイル数を数えるためのバッチ

    フォルダごとのファイル数を数えるためのバッチをネットで調べて作成しました。 このバッチファイルを親フォルダ直下に配置し、ダブルクリックで実行しています。 ------------------------------------------------------------------------- @echo off setlocal enabledelayedexpansion set /a counter=0 dir %1 /ad /s /b >trash.csv for /f "tokens=1 delims=," %%i in (trash.csv) do ( set /a counter = 0 for %%A in (%%i\*) do ( if exist %%A ( set /a counter=counter+1 ) ) echo %%i : !counter! ) ------------------------------------------------------------------------- しかし、結果は、フォルダ名は取得していますが、ファイル数が取得できていません。 こんな感じです。 setlocal コマンドに無効なパラメータが指定されました d:\画像\フォルダ1 = 0 d:\画像\フォルダ2 = 0 d:\画像\フォルダ1\フォルダ3 = 0 どたなかどこが間違っているのかご指摘ください。

  • 複数階層にまたがる別名称フォルダ削除のコマンド

    Windows7を使用しています。 現在作成中のバッチで、下記の階層内にある複数のフォルダを1年分残して削除しようとしています。 最下位のフォルダ名称はYYYYMMDDHHMMSSの日付フォルダになっており、その日付フォルダにはtxtファイルが格納されていますが、日付フォルダごと削除したいと思っています。 C>  新規フォルダ>     アーカイブ>         ビルA>            1階>YYYYMMDDHHMMSS               YYYYMMDDHHMMSS                ・・・            2階>YYYYMMDDHHMMSS                ・・・         ビルB>            地下1階>YYYYMMDDHHMMSS                   YYYYMMDDHHMMSS                   ・・・         ビルC>             1階>YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                YYYYMMDDHHMMSS                ・・・             2階>YYYYMMDDHHMMSS                ・・・             3階>YYYYMMDDHHMMSS                ・・・ コマンドは下記で削除しようと思っていますが、YYYYMMDDHHMMSSフォルダが名称が異なる複数のディレクトリに別れているため()にどう記述すればよいか困っています。 for /d %%Q in (    ) do if "%%Q" LSS "%ALOG%" rd /s %%Q 分かる方がいらっしゃれば教えていただけますでしょうか。 宜しくお願いします。