批处理:从文本文件末尾删除换行符?

时间:2011-06-06 15:07:15

标签: batch-file carriage-return linefeed

我有一个.txt文件,我需要删除最后一行换行符。 在HEX编辑器中查看文件,最后显示“0d 0a”。

我查看了帖子How to delete Linefeed using batch file,但这没有帮助。 我试过了COPY source target /b,这也无济于事。

不幸的是我无法使用Java或任何第三方工具,我需要使用批处理文件。

有没有人知道如何在最后摆脱换行符?

非常感谢和最诚挚的问候, 彼得

2 个答案:

答案 0 :(得分:3)

尝试以下代码作为起点

@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名称的临时文件。

然后它准备一个调试脚本来切断临时文件的最后两个字节。

前两个调试指令RD仅用于显示文件和寄存器的内容(具有包含文件长度的重要CX值)可以删除它们。

然后调试脚本进入汇编程序模式A并生成两条DEC CX指令,这两条指令的值减去CX的两倍。空白行离开汇编程序模式。

该脚本执行G两个汇编指令。

然后调试脚本将W写回读取相同内容的文件,减去两个字节的长度。最后退出Q debug。

此代码仅适用于小于64kB的文件。对于较大的文件,您需要扩展汇编代码,在递减CX以减少BX后检查进位标志。

有关详细信息,请阅读DEBUG /?,然后尝试DEBUG?

答案 1 :(得分:3)

使用批处理这应该可行。

@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,但不附加到最后一行