String 如何在指定字符串后通过CMD向文件中添加一行?

String 如何在指定字符串后通过CMD向文件中添加一行?,string,windows,file,batch-file,cmd,String,Windows,File,Batch File,Cmd,我有这样一个文件: 192.168.123 hostname1 192.168.126 hostname2 192.168.125 hostname3 192.168.124 hostname4 我想通过CMD ex.hostname2搜索一个字符串,并在其后面添加一行,使其看起来像这样: 192.168.123 hostname1 192.168.126 hostname2 192.168.128 hostname5 192.168.125 hostname3 192.168.124 hos

我有这样一个文件:

192.168.123 hostname1
192.168.126 hostname2
192.168.125 hostname3
192.168.124 hostname4
我想通过CMD ex.
hostname2
搜索一个字符串,并在其后面添加一行,使其看起来像这样:

192.168.123 hostname1
192.168.126 hostname2
192.168.128 hostname5
192.168.125 hostname3
192.168.124 hostname4
此外,所有这些都必须在原始文件中完成,而不是移动到另一个文件中

@echo off
setlocal

set "string=hostname2"
set "insert=192.168.128 hostname5"

for /f "tokens=1-2 delims= " %%A in (file.txt) do (
    echo %%A %%B
    if /i "%%~B" == "%find%" echo %insert%
) >> file.tmp

move /y file.tmp file.txt
变量
string
是要查找的字符串。 变量
insert
是要插入的新行 在与
字符串的值匹配的行后插入

for
循环将每个读取行按空格分隔为2个标记。 第一个令牌将是IP地址(似乎缺少一个八位数字)

如果在当前读取行的第二个标记中找到
字符串的值
, 然后插入
insert


写入
file.tmp
后,该文件将替换
file.txt

您尝试了什么?为什么需要在CMD中执行此操作?我尝试通过echo>文件添加它,但它会添加它和文件的底部,是的,我必须通过CMD
for/F“tokens=1,2”%%a in(input.txt)do(
NL
echo%%a%%b
NL
如果“%%b”eq“hostname2”echo 192.168.128 hostname5
NL
注意,批处理文件不能同时读取和写入同一文件。