2011-06-06 97 views
2

我有一个.txt文件,我需要摆脱最后一个换行符。 在十六进制编辑器中查看文件时,它在末尾显示“0d 0a”。批处理:删除文本文件末尾的换行符?

我已经看了线程How to delete Linefeed using batch file,但没有帮助。 我试过COPY source target /b这也没有帮助。

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

有没有人有一个想法如何在最后摆脱那个换行?

非常感谢和问候, 彼得

+0

可能重复(http://stackoverflow.com [如何使用批处理文件删除换行]/questions/3116022 /如何删除换行使用批处理文件) – CharlesB 2011-06-06 15:46:37

+1

为什么不链接的问题工作? – CharlesB 2011-06-06 15:46:54

+0

@CharlesB:我真的不知道。当我在(inputfile.txt)中运行'for/f“delims = tokens = *”%% x do echo %% x >> outputfile.txt'时,它给了我相同的输出 - 最后一个换行符仍然存在。有没有其他方法可以解决这个问题? – Peter 2011-06-07 06:40:36

回答

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,而不是最后一个

+0

你好Jeb,谢谢你 - 这工作正常,但它也删除了我在每行开头和结尾的'''你知道我该如何解决这个问题吗?再次感谢你, Peter – Peter 2011-06-07 12:39:38

+0

你的情况你可以把'set/p'改成' jeb 2011-06-07 21:04:35

+0

Hello Jeb,再次感谢你 - 现在完美的工作!祝好,彼得 – Peter 2011-06-08 06:21:08

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?

+0

+1,使用调试这个好主意,但在这种情况下,我更喜欢jScript/VBScript,因为它也应该在WIN7/64位 – jeb 2011-06-07 08:56:13

+0

工作谢谢PA,解决方案工作正常,但我确实去从杰布。按照你的建议,我会看看DEBUG。最好的问候,彼得 – Peter 2011-06-08 06:20:37