2012-07-11 200 views
9

由於標題狀態,我需要一個批處理文件來刪除文本文件的第3行。批處理文件刪除文本文件的前3行

例如:

A  
B  
C  
D  
E 
F  
G 
在這個例子中,我需要一個

,B和C刪除隨着線

+0

[看這個鏈接] [1]。希望它能爲你工作。 [1]:http://stackoverflow.com/questions/418916/delete-certain-lines-in-a-txt-file-via-a-batch-file – 2012-07-11 08:46:30

+0

阿倫耆那僅工作,如果你知道什麼是行我不 – kriegy 2012-07-11 09:18:04

回答

11

這應該這樣做

for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
echo %%a >>C:\newfile.txt  
) 
xcopy C:\newfile.txt C:\file.txt /y 
del C:\newfile.txt /f /q 

這將重新創建文件的前3行刪除。

爲了讓用戶更新,可以將消息以vbscript樣式集成到批處理文件中,或者在命令提示符中輸出消息。

@echo off 
echo Removing... 
for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
echo %%a >>C:\newfile.txt 
) >nul 
echo Lines removed, rebuilding file... 
xcopy C:\newfile.txt C:\file.txt /y >nul 
echo File rebuilt, removing temporary files 
del C:\newfile.txt /f /q >nul 
msg * Done! 
exit >nul 

希望這會有所幫助。

+0

我似乎跑了一個錯誤「>>是在這個時候沒有被忽視」 – kriegy 2012-07-11 09:09:13

+0

對不起,有一個錯字,我已經在文件名中放了一個''' – 2012-07-11 09:16:32

+0

確定返回了最後3行的第一個單詞 – kriegy 2012-07-11 11:11:45

3

用sed只打印與4號線開始(編輯:只有當你利用聯合國* X :)

$ sed -e '4,$p' in.txt 
+0

我更願意保持它的所有本地,因爲我可能會分發幾份副本謝謝 – kriegy 2012-07-11 09:16:56

+0

這個問題被標記爲[標籤:批次]。你必須得到[Sed for windows](http://gnuwin32.sourceforge.net/packages/sed.htm)才能使它工作。 – 2012-07-11 09:54:01

+0

如果我閱讀只使用批處理的答案,我建議這樣做:) – 2012-07-12 07:06:22

15
more +3 "file.txt" >"file.txt.new" 
move /y "file.txt.new" "file.txt" >nul 

以上是快速的偉大工程,具有以下限制:

  • TAB字符被轉換爲一系列空格。
  • 要保留的行數必須小於〜65535。如果行號超出,MORE將掛起(等待按鍵)。
  • 所有行都將以回車和換行符結束,無論它們在源文件中的格式如何。

以下解決方案使用帶FINDSTR的FOR/F更健壯,但速度更慢。與簡單的FOR/F解決方案不同,它保留空行。但是像所有的FOR/F解決方案一樣,它的最大線長限制在8191字節以內。同樣,所有的行將通過回車和換行來終止。

@echo off 
setlocal disableDelayedExpsnsion 
>"file.txt.new" (
    for /f "delims=" %%A in ('findstr /n "^" "file.txt"') do (
    set "ln=%%A" 
    setlocal enableDelayedExpansion 
    echo(!ln:*::=! 
    endlocal 
) 
) 
move /y "file.txt.new" "file.txt" >nul 

如果你有我的方便,花花公子JREPL.BAT regex text processing utility,那麼你可以使用下面的一個非常強大和快速的解決方案。無論原始格式如何,這仍將終止所有包含回車和換行(\ r \ n)的行。

jrepl "^" "" /k 0 /exc 1:3 /f "test.txt" /o - 

您可以通過添加/U選項寫\ n行結束符,而不是\ r \ n。

如果您必須保留原始行結束符,則可以使用以下變化形式。這會將整個源文件加載到單個JScript變量中,因此總文件大小限制爲大約1或2 GB(我忘記了確切的數字)。

jrepl "(?:.*\n){1,3}([\s\S]*)" "$1" /m /f "test.txt" /o - 

記住JREPL是一個批處理文件,所以如果你另一個批處理腳本中使用的命令必須使用CALL JREPL。

+0

是否值得擁有vbscript msgbox GUI? – kriegy 2012-07-11 12:56:57

+0

別擔心我解決了它 – kriegy 2012-07-11 14:22:12

+0

編輯 - 增加了一個更強大但緩慢的FOR/F解決方案,以及快速和強大的JREPL.BAT解決方案。 – dbenham 2016-02-29 13:24:18

1

我用「更」爲第n行 命令後outting文件(Windows)命令

More +n orginalfilename.txt > outputfilename.txt 

說明: 1.4.3 TXT文件第n行

0

後,如果你想跳過第一和尾部的最後幾行,你可以在 http://www.harchut.de/download/ms-dos/skip-tail-flatfile-example.zip

set L_TRIMFILE_CNT=0 
set L_TRIMFILE_TMPFILE=work.countrows.find.tmp 
find /c /v "" %P_TRIMFILE_INFILE% > %L_TRIMFILE_TMPFILE% 
for /f "skip=1 tokens=3* " %%a in (%L_TRIMFILE_TMPFILE%) do (
    if %L_TRIMFILE_CNT% == 0 set L_TRIMFILE_CNT=%%a 
) 
del %L_TRIMFILE_TMPFILE% 
set /a L_TRIMFILE_EOF=%L_TRIMFILE_CNT%-%P_TRIMFILE_TAIL% 
findstr /n .* "%P_TRIMFILE_INFILE%" > %L_TRIMFILE_TMPFILE% 
if exist %P_TRIMFILE_OUTFILE% del %P_TRIMFILE_OUTFILE% 
set V_TRIMFILE_SKIP="skip=%P_TRIMFILE_SKIP% tokens=1* delims=:" 
if %P_TRIMFILE_SKIP% equ 0 set V_TRIMFILE_SKIP="tokens=1* delims=:" 
for /f %V_TRIMFILE_SKIP% %%a in (%L_TRIMFILE_TMPFILE%) do (
    if %%a leq %L_TRIMFILE_EOF% if exist %P_TRIMFILE_OUTFILE% @echo.%%b>>%P_TRIMFILE_OUTFILE% 
    if %%a leq %L_TRIMFILE_EOF% if not exist %P_TRIMFILE_OUTFILE% @echo.%%b>%P_TRIMFILE_OUTFILE% 
) 
del %L_TRIMFILE_TMPFILE% 

使用我的代碼,你可以跳過或平面文件的尾線,而沒有任何額外的效用。

+1

您可能想爲此答案添加一點解釋。總是比給他一條魚更好地給一個人釣魚竿。 – Amit 2015-05-22 13:50:14

相關問題