Как мне удалить 2-ю до последней строки в текстовом файле, используя пакет? - PullRequest
0 голосов
/ 14 февраля 2012

Я искал этот сайт МНОГИЕ раз и нашел МНОГИЕ связанные вопросы, но ни один не был точно таким же, как мой вопрос, так что ... Мне просто нужно удалить 2-ю до последней строки в текстовом файле (% txtfile% .txt), и это все. Причина, по которой он занимает второе место, заключается в том, что файл был создан с использованием echo.Sample text>>"%txtfile%.txt", поэтому в конце он оставил пустую строку. Теперь я хочу удалить последнюю строку, КРОМЕ пустой строки. Как мне это сделать?

1 Ответ

0 голосов
/ 14 февраля 2012

Ваше определение последней строки отличается от моего. Пара символов <CarriageReturn><LineFeed> завершает строку. В конце вашего файла у вас есть строка, которая заканчивается, и ничего после нее. Если вы откроете файл в текстовом редакторе и перейдете в конец файла, курсор окажется на пустой строке. Но эта строка не является частью текущего файла. На мой взгляд, последняя строка - это строка выше.

Вы можете использовать FIND для определения количества строк. FIND также не считает, что после последней строки должен стоять символ. Затем используйте FINDSTR, чтобы поставить перед каждой строкой номер строки, переданный второй FINDSTR, чтобы отфильтровать «последнюю» строку. Цикл FOR считывает выходные данные, а поиск и замена SET удаляет префикс номера строки. Задержанное расширение включается и выключается в цикле, чтобы защитить его от повреждения !, если оно обнаружено в содержимом файла во время расширения переменной %% L.

@echo off
setlocal disableDelayedExpansion
set file="test.txt"
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N
(
  for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
    set "ln=%%L"
    setlocal enableDelayedExpansion
    echo(!ln:*:=!
    endlocal
  )
)>%file%.new
move %file%.new %file% >nul

После запуска приведенного выше кода желаемая строка будет удалена. Последняя строка будет по-прежнему завершена, поэтому текстовый редактор будет по-прежнему отображать пустую строку после конца файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...