2

サービス アプリケーションのバッチ ファイルを作成するのに助けが必要です。

つまり、アプリケーションはフォルダに新しいファイルがあるかどうかを確認し、ある場合はログ ファイル ( Results.txt) に書き込みます。

問題は、24 時間以内にフォルダに「結果」がない場合、通常は何か問題があるということです。(サービスがクラッシュしたか、ネットワークに問題があるかのいずれかです。) そこでResults.txt、過去 24 時間以内にファイルが変更されたかどうかを確認するバッチ スクリプトを作成する必要があります。

Results.txt私の計画は、md5sumが変更されたかどうかを確認するバッチ ファイルを 24 時間ごとに実行することです。しかし、これについてどうすればよいかわかりません。擬似コードでは、次のようになります。

if not exist old.txt echo. > old.txt & fc "md5.txt" "old.txt"
%md5sum% Results.txt > md5.txt
set equal=no
if md5.txt==old.txt set equal=yes
if equal=no echo No results found in 24 hours >> log.txt
4

2 に答える 2

0

シンプルにいかがですか?派手な MD5 はありませんdir。コマンドの出力だけです。これが機能するのは、チェックしているディレクトリで何も変更されていなければ、いつ実行されても dir コマンドの出力がまったく同じになるためです。

ヘルプとその他のオプションについては、次を参照してください。

dir /?
fc /?

例:

@echo off
if not exist old_fingerprint.txt echo. > old_fingerprint.txt
:: List the directory information, recursive, last write timestamps, 4 digit date
dir /n /s /t:w /4 > new_fingerprint.txt
:: Check out fc /? for all of the comparison options.
fc new_fingerprint.txt old_fingerprint.txt
:: fc sets errorlevel to 0 when the files match and not 0 when the files do not match.
if %ErrorLevel% NEQ 0 echo.No results found in 24 hours>> log.txt

バッチ スクリプトのすべての出力を非表示にする場合は> nul、行の後ろに単に挿入しfcます。

更新: 提供された新しい情報に照らして。

そのため、Results.txt ファイルの最終書き込みタイム スタンプを確認するだけで済みます。変更がないときにファイルに書き込み、タイムスタンプを更新しない限り。

または、さらに良いことに、フォルダーがその内部で何らかのアクティビティを行ったかどうかだけを気にしている場合は、そのフォルダーの「最終書き込み」タイムスタンプを確認してください。タイム スタンプが 24 時間より古い場合は、24 時間以内に結果が見つからない場合に処理できます。

/t:wコマンドでオプションを使用すると、dir必要なタイムスタンプを解析できます。

概要:キス

更新 2:

ディレクトリ情報の純粋な内訳を取得する方法を示すスクリプトの例を次に示します。

@echo off
setlocal

for /f "usebackq tokens=1,2,3,4,*" %%A in (`dir /a:d /l /n /t:w /4`) do (
    echo.
    echo.Date = %%A
    for /f "usebackq tokens=1,2,3 delims=/" %%X in ('%%A') do (
        echo.Month = %%X
        echo.Day = %%Y
        echo.Year = %%Z
    )
    echo.Time = %%B
    for /f "usebackq tokens=1,2 delims=:" %%X in ('%%B') do (
        echo.Hour = %%X
        echo.Minute = %%Y
    )
    echo.Meridiem = %%C
    echo.Type Raw = %%D
    for /f "usebackq tokens=1 delims=<>" %%X in ('%%D') do (
        echo.Type = %%X
    )
    echo.Name = %%E
    echo.
)

endlocal

回答: タイム スタンプを取得して比較する簡単な方法を示すスクリプトを次に示します。このスクリプトを 24 時間ごとに実行するようにスケジュールされたタスクをセットアップします。前回の実行からタイム スタンプが変更されていない場合は、ログ ファイルにメッセージが出力されます。

setlocal enabledelayedexpansion

for /f "usebackq tokens=1,2,3,4,*" %%A in (`dir /a:d /l /n /t:w /4`) do (
    if /i "%%~E"=="Folder" (
        if exist "LastTimeStamp.txt" find /c /i "%%A %%B %%C %%E" LastTimeStamp.txt > nul
        if !ErrorLevel! EQU 0 echo.The folder time stamp has not changed since last checked. >> log.txt
        echo.%%A %%B %%C %%E > LastTimeStamp.txt
    )
)

endlocal
于 2012-12-14T05:06:50.783 に答える
0

これにより、ディレクトリ内のファイルが現在の日付と比較されます。それらが現在の日付よりも古い場合は、どれが新しいかがわかります (必ずしも必要ではありません)。新しいファイルがない場合は、ログに記録されます。

一日の終わりにスケジュールされたタスクでこれを実行すると、うまくいくはずです。

cd yourdir
forfiles /d +%date% /s /c "cmd /c echo @file is new" 2>nul
if %errorlevel%==1 echo No results found in 24 hours >>log.txt
于 2012-12-14T11:14:52.960 に答える