Batch: delete line feed from end of text file?
我有一个.txt文件,该文件需要删除最后一个换行符。
在HEX编辑器中查看文件时,它的末尾显示" 0d 0a"。
我看过线程如何使用批处理文件删除换行符,但这无济于事。
我尝试了COPY source target /b,它也无济于事。
很遗憾,我无法使用Java或任何第三方工具,我需要使用批处理文件。
有人知道如何在最后删除该换行符吗?
非常感谢您,
彼得
- 如何使用批处理文件删除换行的可能重复项
-
为什么链接的问题不起作用?
-
@CharlesB:老实说,我不知道。当我运行for /f"delims= tokens=*" %%x in (inputfile.txt) do echo %%x >> outputfile.txt时,它会提供相同的输出-最后的换行符仍然存在。还有其他方法可以解决该问题吗?
使用批处理应该可以。
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附加到每行,但不添加到最后一行
-
您好Jeb,谢谢-运作良好,但同时也会删除我在每一行开头和结尾处的"。你知道我该怎么解决吗?再次谢谢你,彼得
-
您可以将set /p行更改为<nul set /p .="%%a"
-
您好杰布,再次感谢您-它现在可以正常使用了!最好的问候,彼得
-
您好Jeb,还有一个问题:我需要附加到>> out.txt的源文件在末尾有1个换行符。当我使用您的批次时,换行符将被删除-完美。但是我怎么能保留一个换行符(只是不添加另一个换行符)。还是我应该为此提出一个新问题?彼得,再次非常感谢你
-
充其量您可以打开一个新问题并发布示例文件的内容
-
极好的答案。对我来说,稍微调整一下代码对我很有用。我添加了我的编辑内容,因为它缺少a),而> out.txt位于循环外部。谢谢
-
@Jiraheta Tanks,但是我回滚了您的编辑,它看??起来很奇怪,但是代码是正确的。 (echo()中的括号是平衡的。循环外的重定向也是有意的
-
@jeb如何使它与文件路径一起使用?我需要将源文件指向D:\\AgrCC\\AgrTest\
eport Results\\%1,将目标文件指向D:\\AgrCC\\AgrTest\\Data Export\\%1,但最终将源文件路径作为目标文件中的内容...。
-
@jeb ok:我的新问题
尝试以下代码作为起点
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名称的临时文件中。
然后,它准备调试脚本,以截取临时文件的最后两个字节。
前两个调试指令R和D仅用于显示文件和寄存器的内容(带有包含文件长度的重要CX值),可以将它们删除。
然后,调试脚本进入汇编器模式A,并生成两条DEC CX指令,其指令的值减CX值的两倍。空行将退出汇编器模式。
脚本执行G两条汇编指令。
然后,调试脚本将W写回到文件中,读取的内容相同,长度减去两个字节。最后退出Q调试。
此代码仅适用于小于64kB的文件。对于更大的文件,您需要扩展汇编代码,在将CX递减至BX递减后检查进位标志。
有关更多信息,请阅读DEBUG /?,然后尝试DEBUG和?
- 1,使用debug的好主意,但是在这种情况下,我更喜欢jScript / vbscript,因为它也可以在win7 / 64bit上运行
-
谢谢PA,该解决方案效果很好,但我确实选择了Jeb的解决方案。我将按照您的建议查看DEBUG。最好的问候,彼得