2010-11-22 104 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 「,並把在一個新的字符串:
folder contains a file that is different: folder_thats_different批處理文件返回至下一文本文件的最後一行

是的,我知道我可以使用另一種語言,但我堅持使用批處理文件現在。

回答

3

你可以嘗試用一個for循環讀取它,並採取當前行,始終保存上一行

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%x in (myFile.txt) do (
    set "previous=!last!" 
    set "last=%%x" 
) 
echo !previous! 
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

謝謝你看起來不錯。我怎樣才能使用該行並將其放入字符串變量以備後用? – 2010-11-22 22:11:50

+0

`old_line`只是一個環境變量 - 你可以像其他任何東西一樣使用它。例如,設置my_string_var =%old_line%`。 – 2010-11-22 22:26:21

0

第一個答案對我的作品。我還在結束後添加了2行以允許它重複,以便我可以在不關閉並重新打開的情況下觀看活動日誌文件。我爲太空工程師的遊戲中使用的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 
相關問題