2

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

我查看了线程如何使用批处理文件删除换行但没有帮助。我试过COPY source target /b了也没有帮助。

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

我怎样才能摆脱最后的换行符?

4

2 回答 2

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

于 2011-06-07T08:52:53.927 回答
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调试。

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

有关更多信息,请阅读然后DEBUG /?尝试DEBUG?

于 2011-06-07T08:11:11.680 回答