- 締切済み
特定ディレクトリの監視と実行
お世話になります。 現在、Windows上でタスクスケジュールを使い、 特定のディレクトリ内のファイルを1分毎にバッチファイルを使い、ftpでputするという作業を行っています。 しかし回線負担が多いので、 特定のディレクトリ内のファイルが更新されたら、バッチファイルを使い、ftpでputするという仕組みに変えたいと思っています。 そこで質問なのですが、 その特定のディレクトリを監視して、 ディレクトリ内に変更があった場合、 バッチファイルを実行したいのですが、 なにか良い方法は無いでしょうか? よろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/711)
ファイルが更新されたときのみアップロード実行という方法以外に ミラーリングアップロード機能のあるftpクライアントソフトを使えば、 更新されたファイルだけを転送してくれるので、かなり回線負担が削減できるのでは? (例えば、ffftpのコマンドライン実行) さらにファイルの更新とアップロードのタイミングがぶつからないように 更新中はロックファイルを作るようにして ロックファイルがある間はアップロードを待つようにバッチをプログラムすれば より安全かと。
- notnot
- ベストアンサー率47% (4900/10358)
3つ方法があります。 1.既に回答にあるようにC等を使ってWindowsのAPIでフォルダーを監視する(変更の通知をもらう)プログラムを作る 2.そういうことをやっているフリーソフト(商用ソフト)を探して使う 「Windows フォルダー監視」で検索してみてください。 3.既に回答にあるように、フォルダーを一定時間ごとにチェックするスクリプトを書く。 スクリプトだとタイミングの把握が難しいですが。 レアケースだと思いますが、ちょうどファイルに書いている途中でチェックが行われると書き込み途中のファイルを処理対象にしてしまう。
- masatsan
- ベストアンサー率15% (179/1159)
即座に反映したいなら、Cかなんかでフォルダーに変化があったイベントを捕まえることができます。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
訂正。 監視間隔が「6秒間隔」になっていました。 60秒(1分)間隔にするには timeout /t 6 /nobreak > nul を timeout /t 60 /nobreak > nul に変更して下さい。 なお、このバッチは、timeoutで待ち合わせするので、Ctrl+Cキーでいつでも停止できますし、timeoutコマンドは回線やシステムに負荷をかけません。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>その特定のディレクトリを監視して、ディレクトリ内に変更があった場合、 >バッチファイルを実行したいのですが、なにか良い方法は無いでしょうか? 以下のバッチは、60秒間隔でc:\testdirを監視し、変更があれば、報告します。 @echo off dir c:\testdir | find /V " 個の" | find /V "ディレクトリ" | find /V "<DIR>" > %temp%\od.txt :loop dir c:\testdir | find /V " 個の" | find /V "ディレクトリ" | find /V "<DIR>" > %temp%\nd.txt fc %temp%\od.txt %temp%\nd.txt | find "FC: 相違点は検出されませんでした" > nul if "%errorlevel%"=="0" goto skip echo ディレクトリに変更があった copy %temp%\nd.txt %temp%\od.txt > nul :skip timeout /t 6 /nobreak > nul goto loop このバッチは、監視しているフォルダの状態を、環境変数tempで指定されたフォルダにnd.txt、od.txtと言うファイル名で書き込むので、環境変数tempにテンポラリフォルダのパスを設定しておいて下さい。