2012-12-14 2 views
2

서비스 응용 프로그램 배치 파일을 만드는 데 도움이 필요합니다.로그 파일의 md5sum을 확인하는 일괄 파일

즉, 응용 프로그램은 폴더에 새 파일이 있는지 확인하여 로그 파일 (Results.txt)에 기록합니다.

문제는 24 시간 이내에 폴더에 "결과"가 없으면 대개 잘못된 것입니다. (서비스가 망가 졌거나 네트워크 문제가 있습니다.) 따라서 지난 24 시간 동안 Results.txt 파일이 변경되었는지 확인하기위한 일괄 처리 스크립트를 작성해야합니다.

내 계획은 md5sum이 Results.txt인지 확인하기 위해 매 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 

답변

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 

당신이 배치 스크립트의 모든 출력은 바로 fc 라인 뒤에 > nul 던져 숨기려면

.

업데이트 : 제공된 새 정보와 관련하여.

따라서 Results.txt 파일의 마지막 쓰기 타임 스탬프 만 확인하면됩니다. 변경 사항이 없을 때 파일에 쓰지 않고 타임 스탬프를 업데이트하는 한.

더 좋은 점은, 폴더가 그 안의 어떤 활동을했는지 여부 만 신경 쓰면 그 폴더의 '마지막 쓰기'타임 스탬프를 확인하십시오. 시간 소인이 24 시간보다 오래되면 24 시간 내에 결과를 찾을 수 없습니다.

/t:w 옵션을 dir 명령과 함께 사용하면 필요한 시간 스탬프를 구문 분석 할 수 있습니다.

TLDR : KISS

업데이트 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 
+0

내가 원하는 것이 맞는지 확실하지 않습니다. 결과 파일이 디렉터리가 아닌 24 시간 내에 변경되었는지 확인하려면 파일 Results.txt를 확인해야합니다. –

+0

파일을 지속적으로 추가하고 폴더에서 제거 할 수 있기 때문입니다. 스크립트가 하루가 시작될 때 파일이없고 하루 종일 파일이 추가 및 제거되었지만 폴더가 다음 날까지 비어 있으면 24 시간 후에 아무 것도 변경되지 않았 음을 보여줍니다. 이것이 내가 5 분마다 (dir을 사용하는) 체크하는 스크립트를 가지고 있고, 변경된 시간과 날짜를 기록하고이 파일이 24 시간 후에 바뀌 었는지 확인하는 또 다른 스크립트가 필요합니다. –

+0

@AlexPowell 업데이트 된 답변보기 . –

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 
+0

이것이 작동하지 않는 것 같습니다. –

관련 문제