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

Batch: delete line feed from end of text file?

我有一个.txt文件,该文件需要删除最后一个换行符。
在HEX编辑器中查看文件时,它的末尾显示" 0d 0a"。

我看过线程如何使用批处理文件删除换行符,但这无济于事。
我尝试了COPY source target /b,它也无济于事。

很遗憾,我无法使用Java或任何第三方工具,我需要使用批处理文件。

有人知道如何在最后删除该换行符吗?

非常感谢您,
彼得


使用批处理应该可以。

1
2
3
4
5
6
7
8
9
10
@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附加到每行,但不添加到最后一行


尝试以下代码作为起点

1
2
3
4
5
6
7
8
9
10
11
12
@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?