2017-11-16 14 views
1

파일이 다르며 일괄 처리를 사용하여 파일의 변경 사항을 확인하고 싶습니다. 이것은 내가 가지고있는 것입니다 :일괄 처리가 예상대로 작동하지 않는 특정 파일의 변경 사항 확인

@echo off 
setlocal enableDelayedExpansion 
set "list=test.txt test1.txt" 

:loop 
timeout -t 1 >nul 
for %%j in (%list%) do (
    REM Here only prints test.txt  
    echo %%j 
    for %%i in (%%j) do echo %%~ai|find "a">nul || goto :loop 
    echo file was changed %%j 
    attrib -a %%j 
) 
goto :loop 

하나의 파일 만 사용하면 작동하지만 두 개 이상을 사용하지 마십시오. 그 생각은, echo file was changed %%j은 올바른 파일 만 출력하며 둘 다 출력하지 않는다는 것입니다.

아이디어가 있으십니까?

편집 :

나는 몇 가지 변화 할 경우

@echo off 
title LAN chat reader 
setlocal enableDelayedExpansion 
set "list=test.txt test1.txt" 

:loop 
timeout -t 1 >nul 
for %%j in (%list%) do (
    echo %%j 
    echo %%~aj|find "a">nul || goto :loop 
    echo file was changed %%j 
    attrib -a %%j 
) 
goto :loop 

일을하지만, 내가 처음에 변경 한 후에 만 ​​나에게 두 번째 파일의 변경 사항을 알려줍니다. 나는 그 문제가 반복문에 있다는 것을 이해할 수있다. 그래서 나는 혼란 스럽다.

+0

당신은 루프의 탈옥 후에는 처리 할 수 ​​없습니다 다른 파일. 왜 속성을 찾을 수 없을 때 루프에서 빠져 나오고 있습니까? – Squashman

+0

테스트 용이지만 여전히 작동하지 않습니다. – robe007

+0

또한 소문자 a를 찾고 있기 때문에 find 명령은 항상 false입니다. '/ I' 스위치를'FIND' 명령과 함께 사용하거나 문자를 대문자로 사용하십시오. – Squashman

답변

2

나는 두 가지를 제안합니다.

1 : 대신 루프 중첩의

call :CheckFile "%%j" 

사용

는 - 읽기가 쉬울 것입니다.

2 : 당신은 좀 더 직접적으로 속성 확인 DIR을 사용할 수 있습니다

dir /aa %%j > nul 2>&1 && attrib -a %%j 

을 모두 함께 보이는 뭔가 같은 :

:loop 
    timeout -t 1 >nul 
    for %%j in (%list%) do call :CheckFile "%%j" 
    goto :loop 

:CheckFile 
    echo %1 
    dir /aa %1 > nul 2>&1 || goto :EOF 
    echo file was changed %1 
    attrib -a %1 
    goto :EOF 
+0

Yesss,이게 내가 원하는거야. 덕분에 내 친구 ! – robe007