首页 > 解决方案 > 当计数大于 > 时删除文本文件中的行的批处理文件脚本

问题描述

我有填充有 URL 的文本文档,当我计算文件中的行数时,一旦行数大于1000,我想删除后面的行,保留第一1000行。

这是我的代码,但我不知道我做错了什么。

使用此脚本位置创建一个text.txt文件并将1000垃圾行放入其中进行测试。

@ECHO OFF & setLocal EnableDelayedExpansion
color 0A
%*
SET root_path=%~dp0

set text_name=text.txt
set text_name_output=output_text.txt
set max_line_count=1000
set /a counter=0
for /f %%a in (%root_path%%text_name%) do (
    set /a counter += 1
    echo Number of lines: !counter!
    if !counter! LSS %max_line_count% (

        echo less than

    ) else (

        echo more than so delete these line numbers
        (for /f "tokens=1,* delims=[]" %%a in ('type %root_path%%text_name%^|find /v /n ""') do (
                echo/%%a|findstr /x "!counter!" >nul || echo/%%b
            ))>%root_path%%text_name_output%

    )
)
pause

标签: windowsbatch-filecmd

解决方案


对这个任务使用批处理文件是绝对不合适的,但是,这是一个基本结构,应该可以按照您的要求进行操作,但速度可能会很慢。

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "InFile=text.txt"
Set "LineLimit=1000"
Set "OutFile=output_text.txt"

If Not Exist "%InFile%" Exit /B

(
    For /F Delims^= %%G In (
        '%SystemRoot%\System32\findstr.exe /N /R "^" "%InFile%" 2^>NUL'
    ) Do (
        Set "}=%%G"
        Set /A "{=%%G" 2>NUL
        SetLocal EnableDelayedExpansion
        If !{! Gtr %LineLimit% (
            EndLocal
            GoTo Next
        )
        Echo(!}:*:=!
        EndLocal
    )
) 1>"%OutFile%"

:Next

推荐阅读