0

ログファイルで特定の文字列をチェックし、一致する日付スタンプに基づいて特定のタスクを実行する次のコードがあります。

以下のコードは、日付と時刻の形式が YY-MM-DD hh:mm の Windows 7 マシンでうまく機能しますが、Windows Server 2008 で日付と時刻の形式が YY-MM- のまったく同じバッチ ファイルを実行すると、 DD hh:mm 機能しません - 日時形式である可能性があります...バッチ ファイルで使用されている日時形式が YY-DD-MM 日付形式で機能するかどうかを確認できますか?

また、ログ ファイルの日時形式がログ ファイル自体の日時形式と異なる場合はどうなりますか? コードは引き続き機能しますか?

for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" log.txt') do set "success=%%a"
for %%a in (log.txt) do set "filedate=%%~ta"
if "%filedate:~0,10%"=="%success%" (
    call another.bat
) else (
    >>otherlogfile.log echo(%date% %time% DATABASE UNSUCCESSFUL
)

ありがとうございました


更新 1:

C:\Utilities\Filter>for %a in (logfile.txt) do set "filedate=%~ta"

C:\Utilities\Filter>set "filedate=2013-07-31 21:31"

C:\Utilities\Filter>REM If it still does not work remove REM from next
 line so we can see what is being compared

C:\Utilities\Filter>ECHO.filedate=!filedate:~0,10!]   success=2013/07/
31]
filedate=2013-07-31]   success=2013/07/31]

C:\Utilities\Filter>pause
Press any key to continue . . .

ご覧のとおり、形式が正しくないため、比較対象の日付が一致することはありません。

filedate=2013-07-31]   success=2013/07/31]

何を指示してるんですか?


更新 2:

setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" logfile.txt') do set "success=%%a"

set "%success:^/=-%"
echo %success%
pause
for %%a in (logfile.txt) do set "filedate=%%~ta"

REM If it still does not work remove REM from next line so we can see what is being compared
ECHO.filedate=!filedate:~0,10!]   success=%success%]

pause
if "!filedate:~0,10!"=="%success%" (
    call another.bat
) else (
    >>readlogFail.txt echo(%date% %time% DATABASE UNSUCCESSFUL
)
4

1 に答える 1

2

最初に気付いたのは、FOR ループで filedate の実行時の値を調べたい場合は、SETLOCAL ENABLEDELAYEDEXPANSION を使用してから ! それ以外の %。success と filedate の読み込み時間の値が同じであるため、たまたま Windows 7 で動作する可能性があります。以下のコードを試してください。他にも問題があることに気付くかもしれませんが、最初にこれを行いましょう。成功は FOR/IF 構文内では調べられませんが、filedate は調べられることに注意してください。

setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" log.txt') do set "success=%%a"
set success=%success:/=-%
for %%a in (log.txt) do set "filedate=%%~ta"
REM If it still does not work remove REM from next line so we can see what is being compared
ECHO.filedate=!filedate:~0,10!]   success=%success%]
if "!filedate:~0,10!"=="%success%" (
    call another.bat
) else (
    >>otherlogfile.log echo(%date% %time% DATABASE UNSUCCESSFUL
)
于 2013-07-31T15:16:08.930 に答える