2012-02-14 170 views
0

我已經在這個網站上搜了很多次,發現很多相關的問題,但沒有一個完全像我的問題,所以...我只需要刪除txt文件中的第二行到最後一行(%txtfile%.txt),這就是全部。這是第二次持續的原因是因爲該文件是使用echo.Sample text>>"%txtfile%.txt"製作的,所以它在最後留下了一個emty行。我現在想要刪除空白行的最後一行。我該怎麼做呢?如何使用批次刪除txt文件中的第二行到最後一行?

回答

0

您對最後一行的定義與我的不同。這對字符<CarriageReturn><LineFeed>終止一行。在文件結尾處,你有一條被終止的行,並且沒有任何行。如果在文本編輯器中打開文件並轉到文件末尾,則光標將位於空行上。但是該行不是當前文件的一部分。在我看來,最後一行是上面的一行。

您可以使用FIND來確定行數。 FIND也不認爲在最後一行結束符後面有一行。然後使用FINDSTR在每行的前面加上輸入到第二個FINDSTR的行號來過濾掉「最後」行。 FOR循環讀取輸出,SET搜索和替換刪除行號前綴。延遲擴展在循環中打開和關閉,以防止!在擴展%% L變量期間在文件內容中找到損壞。

@echo off 
setlocal disableDelayedExpansion 
set file="test.txt" 
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N 
(
    for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
    set "ln=%%L" 
    setlocal enableDelayedExpansion 
    echo(!ln:*:=! 
    endlocal 
) 
)>%file%.new 
move %file%.new %file% >nul 

運行上面的代碼後,所需的行將被刪除。最後一行仍然會被終止,所以文本編輯器在文件結束後仍然會顯示一個空行。

+0

好,除了一件事......當我說第二行到最後一行時,您可能會誤解,因爲如果我有一個文件,在單獨的行上顯示hello,wazzup和l8r,它會刪除wazzup。我的意思是它刪除l8r,但因爲有一個默認的額外空間,它需要跳過額外的空間... – BBMAN225 2012-02-14 05:17:17

+0

@VDgames - 然後不要減去行數。我編輯了我的答案。 – dbenham 2012-02-14 12:06:34

+0

確定它現在的作品! – BBMAN225 2012-02-21 03:56:15

相關問題