2012-01-19 3 views
2

우리는 스크립트가 마지막으로 실행 된 이후 Windows 시스템의 파일이 수정되었는지 확인하려고합니다. 유닉스에서 우리는 이것을 할 수있다 :배치 파일의 시간을 기준으로 파일 찾기

if [ "$file" -nt "$touch" ] 
then 
     echo "$file has been changed!" 
     touch "$touch" 
fi 

나는 윈도우 배치 스크립트로 똑같은 일을 할 필요가있다. 아니요, Perl, Python, Ruby, Cygwin 또는 PowerShell을 사용할 수 없습니다. 이 특정 서버에서는 사용할 수 없습니다. 사실,이 서버에 액세스 할 수 없습니다. 나는 배치 스크립트를 만들고 다른 누군가에게 그것을 설치하고 그것이 작동되기를 기대한다고 가정합니다.

예, 작업자는 매일 funner와 funner를 얻습니다.

답변

2

배치 스크립트와 테스트 파일이 같은 디렉토리에 있고 배치 스크립트가 읽기 전용이 아닌 한 작동해야합니다. 공백이있는 변수 file에 여러 파일 이름을 구분 기호로 추가하여 많은 파일 중 하나가 업데이트 된 경우 실행되도록 조정할 수 있습니다.

@echo off 
setlocal 
set file="test.txt" 

pushd %~dp0 
for /f %%F in ('dir /b /o-d "%~nx0" %file%') do (
    if "%%~F" neq "%~nx0" (
    echo %file% has changed 
    rem Below is weird syntax for updating timestamp of this batch script 
    copy "%~nx0"+,, >nul 
) 
    goto :continue 
) 
:continue 
popd 
+0

EDIT - 현재 디렉토리가 배치 디렉토리와 일치하지 않으면 원래 코드가 실패했습니다. 수정 된 코드는 관계없이 작동해야합니다. – dbenham

+0

'dir '에서/t 스위치를 사용하여 마지막 쓰기 날짜/시간을 비교할 수 있습니다. – Mechaflash

+0

@Mechaflash - 내 이해는 마지막으로 작성된 시간이 기본값이며 내 테스트가이를 뒷받침하는 것으로 보입니다. '/ TW'를 추가하는 것은 상처를 줄 수 없지만, 어떤 차이를 만들지는 모른다. – dbenham

관련 문제