2011-06-06 95 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