从多个文本文件中删除倒数第二行

时间:2014-11-14 20:52:03

标签: batch-file

我有多个.TXT文件,其中第二行是观察摘要(即(452,246))。

在搜索论坛时,我发现了这段代码:

@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

此代码在单个文件上完美运行,但我不知道如何更改此代码以针对我的文件夹(* .txt)中的所有文件运行它。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你需要这样的东西。 FOR %% A循环遍历您设置为&#34; dirpath&#34;的文件夹中的所有文本文件。

@echo off
setlocal enableDelayedExpansion
    Set "dirpath=PathtoYourFiles"
    FOR %%A IN ("%dirpath%\*.txt") DO (
    set file=%%A
    call :stripline
    )

:stripline
setlocal disableDelayedExpansion
    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
exit /b

试试吧。如果它不起作用,请在%file%上使用!标记,如下所示:

    for /f "delims=" %%L in ('findstr /n "^" !file!^|findstr /v "^%skip%:"') do (

答案 1 :(得分:0)

虽然你的代码不符合你的陈述,但它会删除文件中的最后一行,而不是倒数第二行,如果结果是你需要的那样,......

将您的代码封装在一个新的外部for循环中,该循环将迭代文件列表,并将文件引用从%file%替换为新的for可替换参数

@echo off
setlocal disableDelayedExpansion

    for %%F in (*.txt) do for /f %%N in ('find /c /v "" ^< "%%~fF"') do (
        (   for /f "delims=" %%L in (
                'findstr /n "^" "%%~fF" ^|findstr /r /v /b /c:"%%N:"'
            ) do (
                set "ln=%%L"
                setlocal enableDelayedExpansion
                echo(!ln:*:=!
                endlocal
            )
        ) > "%%~fF.new"
        move "%%~fF.new" "%%~fF"
    )