пакетный файл для возврата рядом с последней строкой текстового файла - PullRequest
4 голосов
/ 23 ноября 2010

У меня есть файл, который содержит вывод файла сравнения, записанного в текстовый файл:
Comparing files C:\LOGS\old.txt and C:\LOGS\NEW.TXT<br> ***** C:\LOGS\old.txt<br> ***** C:\LOGS\NEW.TXT<br> folder_thats_different<br> *****
Мне нужно вытащить следующую за последней строкой "folder_thats_different" и вставить новую строку:
folder contains a file that is different: folder_thats_different

Да, я знаю, что могу использовать другой язык, но сейчас я застрял в пакетных файлах.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2010

Вы можете попробовать прочитать его с помощью цикла for, взять текущую строку и всегда сохранить предыдущую строку

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%x in (myFile.txt) do (
    set "previous=!last!"
    set "last=%%x"
)
echo !previous!
0 голосов
/ 12 июля 2015

Первый ответ у меня работает.Я также добавил 2 строки после конца, чтобы он мог повторяться, чтобы я мог просматривать активный файл журнала, не закрывая и не открывая его снова.Я много отлаживаю для модов, которые используются в игре Space Engineers.Моя версия выглядит следующим образом:

@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
0 голосов
/ 23 ноября 2010

Вот пример, который вы можете использовать в качестве отправной точки.Просто измените имя файла в строке 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

Конечно, вы, вероятно, захотите сделать что-то другоепросто повторяя найденную строку.

...