您不能直接修改文件。您必须创建一个包含所需内容的新文件,然后用新文件替换原始文件。
您可以通过重定向输出和回显所需内容来创建新文件。我ECHO(%%b
在 %%b 为空的情况下使用,因为该行是空白的。如果 b 为空,ECHO %%b
将产生。ECHO is off.
大多数人使用ECHO.
,但在深奥的条件下可能会失败。ECHO(
永远不会失败。
您使用 MOVE 将原始文件替换为新文件。
您可以通过在 FIND 之后使用 FINDSTR 过滤掉不需要的行来消除检查 FOR /F 循环中的数字的需要。
请注意,到目前为止,您的代码将删除每一行的所有前导[
和]
字符。因为线路过滤器是在 FOR 迭代之前应用的,所以您可以通过将 DELIMS 设置为 only 来稍微改善这种情况]
。
@ECHO OFF
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "tokens=1* delims=]" %%a IN (
'FIND /n /v "" ^<tmp.txt^|FINDSTR /VLB "[%LINENUMBER%]"'
) DO ECHO(%%b
)
>nul MOVE /y tmp.txt.new tmp.txt
如果您的任何原始行已经开始,]
那么您可以使用 FINDSTR 而不是 FIND 来引入行号。这使用nn:
格式而不是[nn]
. :
该解决方案将从您的生产线中去除领先优势。
@ECHO OFF
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "tokens=1* delims=:" %%a IN (
'FINDSTR /n "^" tmp.txt^|FINDSTR /VLB "%LINENUMBER%:"'
) DO ECHO(%%b
)
>nul MOVE /y tmp.txt.new tmp.txt
如果您的文本文件包含以两者开头的行,:
那么]
您不能使用 FOR /F 来解析行号。相反,您使用搜索和替换。延迟扩展在循环中打开和关闭,以保护!
文件中可能存在的任何内容。
@ECHO OFF
setlocal disableDelayedExpansion
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "delims=" %%a IN (
'FINDSTR /n "^" tmp.txt ^| FINDSTR /VLB "%LINENUMBER%:"'
) DO (
set "ln=%%a"
setlocal enableDelayedExpansion
echo(!ln:*:=!
endlocal
)
)
>nul MOVE /y tmp.txt.new tmp.txt