正如标题所述,我需要一个批处理文件来删除文本文件的前 3 行。
例如:
A
B
C
D
E
F
G
在此示例中,我需要将 A、B 和 C 与行一起删除
正如标题所述,我需要一个批处理文件来删除文本文件的前 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
以上速度很快,效果很好,但有以下限制:
以下使用 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 GB(我忘记了确切的数字)。
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 行命令后使用“更多”命令输出文件(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%
您可以跳过或取消平面文件的行,而无需任何其他实用程序。