Пакетное: удалить перевод строки из конца текстового файла? - PullRequest
2 голосов
/ 06 июня 2011

У меня есть файл .txt, в котором мне нужно избавиться от последнего перевода строки. Глядя на файл в HEX-редакторе, он показывает «0d 0a» в конце.

Я смотрел на ветку Как удалить перевод строки, используя командный файл , но это не помогло. Я пробовал COPY source target /b, что также не помогает.

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

У кого-нибудь есть идеи, как избавиться от этого перевода строки в конце?

Большое спасибо и наилучшие пожелания, Питер

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

При использовании пакета это должно работать.

@echo off
setlocal DisableDelayedExpansion
set "firstLineReady="
(
    for /F "eol=$ delims=" %%a in (myFile.txt) DO (
        if defined firstLineReady (echo()
        set "firstLineReady=1"
        <nul set /p "=%%a"
    )
) > out.txt

Копирует все строки и добавляет к каждой строке CR / LF, но не к последней

3 голосов
/ 07 июня 2011

попробуйте следующий код в качестве отправной точки

@echo off
copy %1 temp.txt
echo d >debug.tmp
echo r >>debug.tmp
echo a >>debug.tmp
echo dec cx >>debug.tmp
echo dec cx >>debug.tmp
echo. >>debug.tmp
echo g =100 102 >>debug.tmp
echo w >>debug.tmp
echo q >>debug.tmp
debug temp.txt <debug.tmp

Этот пакет сначала копирует файл во временный файл, который должен иметь имя 8.3.

Затем он подготавливает сценарий отладки, чтобы отрубить последние два байта временного файла.

Первые две команды отладки R и D предназначены только для отображения содержимого файла и регистра (с важным значением CX, содержащим длину файла). Их можно удалить.

Затем сценарий отладки переходит в режим ассемблера A и выдает две DEC CX инструкции, которые уменьшают вдвое значение CX.Пустая строка выходит из режима ассемблера.

Сценарий выполняет G две инструкции по сборке.

Затем сценарий отладки записывает W обратно в файл то же прочитанное содержимое, минус два байтав длину.И, наконец, выходит Q debug.

Этот код работает только с файлами размером менее 64 КБ.Для больших файлов вам нужно расширить код сборки, проверяя флаг переноса после уменьшения CX до уменьшения BX.

Для получения дополнительной информации прочитайте DEBUG /?, а затем попробуйте DEBUG и ?

...