簡體   English   中英

批處理文件刪除文本文件的前3行

[英]Batch file to delete first 3 lines of a text file

正如標題所述,我需要一個批處理文件來刪除文本文件的第1行3行。

例如:

A    
B    
C    
D    
E   
F    
G

在這個例子中,我需要刪除A,B和C以及該行

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

上述速度快,效果很好,但有以下限制:

  • TAB字符轉換為一系列空格。
  • 要保留的行數必須小於~65535。 如果超過行號,則會掛起(等待按鍵)。
  • 所有行都將通過回車符和換行符終止,無論它們在源中的格式如何。

使用FOR / F和FINDSTR的以下解決方案更加強大,但速度要慢得多。 與簡單的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正則表達式文本處理實用程序 ,那么您可以使用以下內容獲得非常強大和快速的解決方案。 無論原始格式如何,這仍然會終止所有帶回車符和換行符(\\ r \\ n)的行。

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

您可以通過添加/U選項來編寫\\ n行終止符而不是\\ r \\ n。

如果必須保留原始行終止符,則可以使用以下變體。 這會將整個源文件加載到單個JScript變量中,因此總文件大小限制為大約1或2千兆字節(我忘記了確切的數字)。

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

請記住,JREPL是一個批處理文件,因此如果在另一個批處理腳本中使用該命令,則必須使用CALL JREPL。

這應該做到這一點

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

希望這可以幫助。

使用sed僅從第4行開始打印( 編輯:僅當你使用Un * x :)

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

在第n行命令后使用“more”命令輸出文件(windows)

More +n orginalfilename.txt > outputfilename.txt

說明:在第n行后輸出txt文件

如果你想跳過第一行並拖尾最后一行,你可以使用我的代碼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%

您可以跳過或拖尾平面文件而無需任何其他實用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM