![如何为批处理文件指定文本文件中的一行文本](https://linux22.com/image/1322978/%E5%A6%82%E4%BD%95%E4%B8%BA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E6%8C%87%E5%AE%9A%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E4%B8%80%E8%A1%8C%E6%96%87%E6%9C%AC.png)
我想知道我是否可以告诉计算机使用批处理文件对文本文件执行命令,但是我想指定要修改哪一行。
我还没有这方面的任何代码,如果您能给出详细的解释我将不胜感激。
如果我得到这个命令,我打算用它来删除或写入该精确行,而不是覆盖另一行。
答案1
通过 Windows 命令提示符执行此操作比实际操作更有趣,但这是可能的。您可以使用它for /f
一次一行地浏览文件,但我不知道有什么简单的方法来跟踪当前行。以下代码使用对子例程的调用来手动计数行数。将使用文件名、要替换的行号和替换字符串来调用批处理文件。
@echo off
set filename=%1
set targetline=%2
set message=%3
set n=0
for /F "tokens=*" %%i in (%filename%) do call :write %%i
exit /b 0
:write
set /a n+=1
if %n%==%targetline% (echo %message%) else echo %*
exit /b 0
输出样例replace.bat somelines.txt 3 "Hello, world!"
:
first line
second line
"Hello, world!"
fourth line
答案2
用于 Windows 的 Sed将允许您对文本文件执行面向行的操作:
Sed(流编辑器)实际上并不是真正的文本编辑器或文本处理器。相反,它用于过滤文本,即,它接受文本输入并对其执行某些操作(或一组操作)并输出修改后的文本。Sed 通常用于使用模式匹配提取文件的一部分或替换文件中多次出现的字符串。