Batch file 如何替换文本文件最后20行中的文本? @ECHO OFF&SETLOCAL 复制/Y C:\LOG.DIR LOG.DIR 设置“旧=不活动” 设置“新建=活动” 对于/f%%a IN(“^@echo off setlocal enableextensio

Batch file 如何替换文本文件最后20行中的文本? @ECHO OFF&SETLOCAL 复制/Y C:\LOG.DIR LOG.DIR 设置“旧=不活动” 设置“新建=活动” 对于/f%%a IN(“^@echo off setlocal enableextensio,batch-file,Batch File,如何替换文本文件最后20行中的文本? @ECHO OFF&SETLOCAL 复制/Y C:\LOG.DIR LOG.DIR 设置“旧=不活动” 设置“新建=活动” 对于/f%%a IN(“^@echo off setlocal enableextensions enabledelayedexpansion 复制/y c:\log.dir log.dir 设置“旧=不活动” 设置“新建=活动” 对于(“^中的/f%%a,您正在删除文件的最后20行,但问题无法解释原因。显然,如果文件少于20行,您将

如何替换文本文件最后20行中的文本?
@ECHO OFF&SETLOCAL
复制/Y C:\LOG.DIR LOG.DIR
设置“旧=不活动”
设置“新建=活动”
对于/f%%a IN(“^
@echo off
setlocal enableextensions enabledelayedexpansion
复制/y c:\log.dir log.dir
设置“旧=不活动”
设置“新建=活动”

对于(“^中的/f%%a,您正在删除文件的最后20行,但问题无法解释原因。显然,如果文件少于20行,您将以空文件结束。您能否解释代码为何以这种方式运行,或者代码的用途是什么?我只想将最后20行更改为活动,如果每行少于20行。
@ECHO OFF & SETLOCAL
copy /Y C:\LOG.DIR LOG.DIR
set "old=INACTIVE"
set "new=ACTIVE"
FOR /f %%a IN ('^<log.DIR find /v /c ""') DO SET /a length=%%a
SET /a length-=20
SETLOCAL ENABLEDELAYEDEXPANSION
<log.DIR  (
FOR /l %%a IN (1,1,%length%) DO (
    SET "line="
    SET /p "line="
    ECHO !line!
))>newfile
ENDLOCAL
for /f "skip=%length% delims=" %%a in (LOG.DIR) do (
    set "str=%%a"
    SETLOCAL ENABLEDELAYEDEXPANSION
    set "str=!str:%old%=%new%!"
    >>newfile ECHO !str!
    endlocal
)
@echo off 
    setlocal enableextensions enabledelayedexpansion

    copy /y c:\log.dir log.dir

    set "old=INACTIVE"
    set "new=ACTIVE"

    for /f %%a in ('^<log.dir find /v /c ""') do set /a "length=%%a"

    if %length% gtr 20 ( set /a "startPoint=length-20+1" ) else ( set "startPoint=1" )

    <log.dir (
        for /l %%a in (1,1,%length%) do (
            set "line="
            set /p "line="
            if not defined line (
                echo(
            ) else if %%a lss %startPoint% (
                echo(!line!
            ) else (
                echo(!line:%old%=%new%!
            )
        )
    )>newfile

    endlocal