Windowsコマンドプロンプトでのフォルダ監視と変更の記録方法

この記事では、Windowsのコマンドプロンプトを使用して、特定のフォルダの変更を監視し、変更があればログファイルにその変更を記録する方法について詳しく解説します。具体的なコード例とその詳しい解説、さらに応用例を4つ提供します。

目次

コマンドプロンプトとは?

コマンドプロンプトは、Windowsオペレーティングシステムにおいて、ユーザーがコンピュータにテキストベースの「コマンド」を入力して直接操作するためのインターフェースです。このコマンドは、特定の操作を行うための指示や命令をコンピュータに伝えるもので、ファイルの操作、システム設定の変更、ネットワークの管理など、様々なタスクを実行することが可能です。グラフィカルユーザーインターフェース(GUI)の前身として、初期のコンピュータシステムで主に使用されていましたが、今日でも多くの専門家や上級ユーザーが高度なタスクを効率的に実行するためにコマンドプロンプトを使用しています。

基本的な監視コードの作成

@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. 特定のファイルタイプの変更のみを監視

@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`を使用する例を示します。

@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. 変更があったファイルを別のフォルダにコピー

@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. 一定時間後に変更がなければ警告メッセージを表示

@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

まとめ

コマンドプロンプトを用いることで、簡単にフォルダの変更を監視し、様々なアクションを自動的に実行することが可能です。今回紹介した方法や応用例を元に、ご自身のニーズに合わせてカスタマイズしてください。

コメント

コメントする

目次