2010-11-22 4 views
4

나는 파일의 출력을 포함하는 파일을 텍스트 파일에 기록 그게 전부 비교 :
내가 마지막 줄에 다음을 당겨야 Comparing files C:\LOGS\old.txt and C:\LOGS\NEW.TXT
***** C:\LOGS\old.txt
***** C:\LOGS\NEW.TXT
folder_thats_different
*****

"folder_thats_different을 "새 문자열을 넣으십시오.
배치 파일은 텍스트 파일의 마지막 줄 옆으로 돌아갑니다

예, 다른 언어를 사용할 수 있지만 지금은 배치 파일이 붙어 있습니다.

답변

3

당신은 이전 행 첫 번째 대답은 나를 위해 작동

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (myFile.txt) do (
    set "previous=!last!" 
    set "last=%%x" 
) 
echo !previous! 
+0

어떤 이유로 마지막 줄이 작동하지 않습니다. 라인을 출력하는 대신'ECHO is off'를 얻습니다. –

+0

그럼! 이전! 비어 있거나 입력하지 못했거나 잘못된 파일을 가져온 경우 myFile.txt를 바꾸고 for 루프에 에코를 추가하여 코드를 디버깅 할 수 있습니다 – jeb

0

다음은 출발점으로 사용할 수있는 예입니다. set command= 행의 파일 이름을 적절한 이름으로 변경하거나 로그 목록을 작성하는 모든 것으로 명령을 바꾸십시오.

@echo off 
@setlocal 

(set command=type test.txt) 

for /f "usebackq tokens=*" %%i in (`%command%`) do call :process_line %%i 
echo next to last line: %old_line% 
goto :eof 

:process_line 
(set old_line=%new_line%) 
(set new_line=%*) 
goto :eof 

물론 찾을 수있는 선을 표시하는 것 이외의 다른 작업을 수행하고 싶을 것입니다.

+0

감사합니다. 나중에 어떻게 사용하려면 해당 행을 문자열 변수에 넣을 수 있습니까? –

+0

'old_line'은 환경 변수 일 뿐이므로 다른 변수처럼 사용할 수 있습니다. 'set my_string_var = % old_line %', 예를 들면. –

+0

작동하지만 통화 시간이 극심합니다. DelayedExpansion 변형보다 20 배 느립니다. – jeb

0

을 A의 루프와 함께 읽고 현재의 라인을 가지고, 항상 저장하려고 할 수 있습니다. 또한 닫고 다시 열지 않고도 활성 로그 파일을 볼 수 있도록 끝에 두 줄을 추가하여 반복 할 수 있도록했습니다. 게임 우주 기술자 (Space Engineers)에서 사용되는 모드 (mod)에 대해 많은 디버깅 작업을 수행합니다. 내 버전은 다음과 같습니다

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (SpaceEngineers.log) do (
    set "previous=!last!" 
    set "last=%%x" 
) 
echo !previous! 
timeout 15 /nobreak 
se_log 

아래 라인은 너무 빨리 루프에서 배치 파일을 중지하고 키 우회를 중지합니다. 초 단위로 시간을 변경하려면 숫자 "15"를 원하는 것으로 변경하십시오. 배치 파일을 중지하려면 ctrl + c을 누르기 만하면됩니다.

timeout 15 /nobreak 

아래 줄은 내가 만든 배치 파일의 이름으로 CMD에 다시 실행되도록 지시합니다.

se_log 
관련 문제