我有一个.txt文件,我需要删除最后一行换行符。 在HEX编辑器中查看文件,最后显示“0d 0a”。
我查看了帖子How to delete Linefeed using batch file,但这没有帮助。
我试过了COPY source target /b
,这也无济于事。
不幸的是我无法使用Java或任何第三方工具,我需要使用批处理文件。
有没有人知道如何在最后摆脱换行符?
非常感谢和最诚挚的问候, 彼得
答案 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名称的临时文件。
然后它准备一个调试脚本来切断临时文件的最后两个字节。
前两个调试指令R
和D
仅用于显示文件和寄存器的内容(具有包含文件长度的重要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,但不附加到最后一行