2016-04-30 12 views
0

特定のファイル(LogTest.txtなど)の変更を継続的に監視するバッチスクリプトを作成する必要があります。ファイルの変更を監視するバッチスクリプト

ファイルが更新されると、VBScriptメッセージボックスがトリガーされ、LogTest.txt内の最後の行が表示されます。考え方は、メッセージボックスがクリアされた後も監視を継続することです。

私はforfilesオプションを使用しようとしましたが、これは実際には、日付ではなく時間を扱うことができます。私はPowerShellと他のオプションが利用可能であることを知っていますが、理由を説明するにはあまりにも長いので、私はバッチとVBScriptを使用できるだけに限られています。

バッチファイル:

@echo off 

:RENEW 

forfiles /m LogTest.txt /d 0 
if %errorlevel% == 0 (
    echo The file was modified today 
    forfiles /M LogTest.txt /C "cmd /c echo @file @fdate @ftime" 
    cscript MessageBox.vbs "Error found." 
    REM do whatever else you need to do 
) else (
    echo The file has not been modified today 
    dir /T:W LogTest.txt 
    REM do whatever else you need to do 
) 

goto :RENEW  

MessageBox.vbs

Set objArgs = WScript.Arguments 
messageText = objArgs(0) 
MsgBox "This is an error", vbOkCancel + vbExclamation, "Error Found" 
+1

ダウンロードフォルダへの追加を監視するための[バッチファイル]の複製があります(http://stackoverflow.com/questions/4230976/batch-file-to-monitor-additions-to-download-folder) – JabberwockyDecompiler

+0

コメントありがとうございましたディレクトリへの追加ファイルではなく、特定のファイルを監視して更新を書き込むだけです。 –

+0

とにかくVBScriptを使用する場合は、[VBScriptで完全に]監視することをお勧めします(http://stackoverflow.com/a/16119815/1630171)。 –

答えて

4

すべてのファイルのアーカイブ属性があります。 Windowsはファイルへのすべての書き込みアクセス時にこの属性を設定します。

あなたはattribコマンドでそれを設定して、と例のためにそれを確認することができます。

@echo off 
:loop 
timeout -t 1 >nul 
for %%i in (LogTest.txt) do echo %%~ai|find "a">nul || goto :loop 
echo file was changed 
rem do workload 
attrib -a LogTest.txt 
goto :loop 

timeout /t 1 >nul:小さな待機間隔をCPU-負荷を減らすために(いくつかのアイドル時間なしでループを構築することはありません)

for %%i in (logTest.txt) do ...プロセス

echo %%~ai印刷属性が(詳細はfor /?参照)ファイル

|find "a" >nulは(私たちは、ただERRORLEVELをそれを必要としない)「として

|| goto :loop作品以前echoの出力で「」rchive属性を見つけ、涅槃への出力をリダイレクトしようとした場合、前のコマンド( findは)findが成功した場合は

アーカイブ属性があります)、その後、次の行が処理されます(echo file was changed ...)ラベル:loop

で再起動し、その後、失敗しましたファイルのアーカイブ属性を設定解除します。

+0

この情報をお寄せいただきありがとうございます。私はこれをどのように使用できるかを判断しようとしていますが、私のような初心者の方はスクリプトでこれを利用するのに苦労しています。 –

+0

新しいバッチファイルに入れて実行するだけです。次に、 'logtest.txt'を編集して(バッチが実行中)何が起こるかを見てください。 – Stephan

+0

ステファンあなたの天才!私はちょうど "エコーファイルが変更された"後、私のMessageBoxのVBスクリプトのコールラインを追加し、うまく動作しているようだ、私はこのtomをテストし、ネットワーク共有上のファイルを監視するかどうかを確認します。ご協力いただきありがとうございます。 –

関連する問題