この記事では、Windowsのコマンドプロンプトを使用して、特定のフォルダの変更を監視し、変更があればログファイルにその変更を記録する方法について詳しく解説します。具体的なコード例とその詳しい解説、さらに応用例を4つ提供します。
目次
コマンドプロンプトとは?
コマンドプロンプトは、Windowsオペレーティングシステムにおいて、ユーザーがコンピュータにテキストベースの「コマンド」を入力して直接操作するためのインターフェースです。このコマンドは、特定の操作を行うための指示や命令をコンピュータに伝えるもので、ファイルの操作、システム設定の変更、ネットワークの管理など、様々なタスクを実行することが可能です。グラフィカルユーザーインターフェース(GUI)の前身として、初期のコンピュータシステムで主に使用されていましたが、今日でも多くの専門家や上級ユーザーが高度なタスクを効率的に実行するためにコマンドプロンプトを使用しています。
基本的な監視コードの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off setlocal enabledelayedexpansion :: 監視対象のディレクトリ set TARGET_DIR=C:\path\to\watched\folder :: ログファイルのパス set LOG_FILE=C:\path\to\log\file.log :LOOP for /f "tokens=*" %%i in ('dir /b %TARGET_DIR%') do ( if not exist "!LOG_FILE!" (echo %%i >> !LOG_FILE!) ) timeout /t 10 goto LOOP |
コードの詳細解説
上記のコードは、TARGET_DIR
で指定されたフォルダの変更を監視し、新たなファイルやフォルダが追加された場合、その名前をLOG_FILE
に記録します。10秒ごとにチェックを行い、無限ループで監視を続けます。
応用例
1. 特定のファイルタイプの変更のみを監視
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@echo off setlocal enabledelayedexpansion :: 監視対象のディレクトリ set TARGET_DIR=C:\path\to\watched\folder :: ログファイルのパス set LOG_FILE=C:\path\to\log\file.log :: 監視対象の拡張子 set EXTENSION=.txt :LOOP for /f "tokens=*" %%i in ('dir /b %TARGET_DIR%\*%EXTENSION%') do ( if not exist "!LOG_FILE!" (echo %%i >> !LOG_FILE!) ) timeout /t 10 goto LOOP |
2. 変更時にメールを送信
メール送信には外部ツールやスクリプトが必要です。ここでは仮のコマンドsendmail
を使用する例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off setlocal enabledelayedexpansion :: 監視対象のディレクトリ set TARGET_DIR=C:\path\to\watched\folder :: メール送信先 set EMAIL=example@example.com :LOOP for /f "tokens=*" %%i in ('dir /b %TARGET_DIR%') do ( sendmail -to !EMAIL! -subject "変更を検知" -message "%%i が変更されました" ) timeout /t 10 goto LOOP |
3. 変更があったファイルを別のフォルダにコピー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off setlocal enabledelayedexpansion :: 監視対象のディレクトリ set TARGET_DIR=C:\path\to\watched\folder :: コピー先のディレクトリ set COPY_DIR=C:\path\to\copy\folder :LOOP for /f "tokens=*" %%i in ('dir /b %TARGET_DIR%') do ( if not exist "!COPY_DIR!\%%i" (copy "%%i" "!COPY_DIR!") ) timeout /t 10 goto LOOP |
4. 一定時間後に変更がなければ警告メッセージを表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@echo off setlocal enabledelayedexpansion :: 監視対象のディレクトリ set TARGET_DIR=C:\path\to\watched\folder :: 最後に変更が確認された時刻 set LAST_CHANGED=%time% :LOOP for /f "tokens=*" %%i in ('dir /b %TARGET_DIR%') do ( :: 変更があった場合、現在時刻を保存 set LAST_CHANGED=%time% ) :: 1時間以上変更がない場合、警告を表示 if %time% - !LAST_CHANGED! gtr 1 (echo "1時間以上変更がありません") timeout /t 3600 goto LOOP |
まとめ
コマンドプロンプトを用いることで、簡単にフォルダの変更を監視し、様々なアクションを自動的に実行することが可能です。今回紹介した方法や応用例を元に、ご自身のニーズに合わせてカスタマイズしてください。
created by Rinker
¥3,278
(2023/10/01 10:08:51時点 Amazon調べ-詳細)
コメント