Batch file 使用批处理文件编辑文本文件

Batch file 使用批处理文件编辑文本文件,batch-file,replace,line,Batch File,Replace,Line,我已经搜索了上千个例子并尝试过,但没有一个真正适合我。我的要求非常简单,我有一个文件-config.txt,其中有一行: sqlServer=localhost 我正在尝试将此行更新为: sqlServer=myMachine\sql2012 我在网上查看了一些示例,其中一些只是处理设置变量,或者一些不是替换而是插入。有一些示例正在写入新文件,但新文件的每行前面都有行号。我找不到关于如何编写批处理脚本的有用说明,而且更新文件批处理脚本都不适合我 如果你留下一些评论,这将是非常有帮助的 提前感谢您

我已经搜索了上千个例子并尝试过,但没有一个真正适合我。我的要求非常简单,我有一个文件-config.txt,其中有一行:

sqlServer=localhost

我正在尝试将此行更新为:

sqlServer=myMachine\sql2012

我在网上查看了一些示例,其中一些只是处理设置变量,或者一些不是替换而是插入。有一些示例正在写入新文件,但新文件的每行前面都有行号。我找不到关于如何编写批处理脚本的有用说明,而且更新文件批处理脚本都不适合我

如果你留下一些评论,这将是非常有帮助的

提前感谢

您可以这样做:

FINDSTR /I /V /B "sqlServer=" config.txt > config.new
ECHO sqlServer=myMachine\sql2012 >> config.new
DEL config.txt
REN config.new config.txt
FINDSTR
将删除所有以
sqlServer=
开头的行,并创建一个名为
newfile
的新文件

ECHO
将在末尾添加一行
sqlServer=MyMachine\sql2012


最后两行删除现有的
config.txt
,并将其替换为前两行的输出。

已编辑-以适应注释

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "config=.\config.txt"
    set "dbServer=localhost\sql2012"

    for /f "tokens=*" %%l in ('type "%config%"^&cd.^>"%config%"'
    ) do for /f "tokens=1 delims== " %%a in ("%%~l"
    ) do if /i "%%~a"=="sqlServer" (
        >>"%config%" echo(sqlServer=%dbServer%
    ) else (
        >>"%config%" echo(%%l
    )

    type "%config%"

    endlocal
逐行读取输入文件(
对于/f%%l
),然后拆分每行(
对于/f%%a
),如果行中的第一个令牌是“sqlserver”,则替换该行,否则将原始行发送到文件


用于在第一个
for
循环中检索信息的命令包括一张
cd.>%config%“
,该cd将删除文件的内容,因此最终生成的行(在删除前已由
for
命令在内存中读取)将直接发送到同一文件。

看起来正确,除了不提示del:del/q config.txthi Mark之外,脚本还删除了所有其他行,“sqlServer=”是其中一行,还有其他参数我不想更改,您知道如何保留这些内容吗?请更改脚本第一行的最后一部分,使其与要删除的行完全匹配,即FINDSTR/V/B“sqlServer=localhost”。如果无法做到这一点,请编辑您的问题并显示文件的外观。如果我要传递参数以分配sqlServer值,该怎么办?我更新为:set dbServer=localhost\sql2012。。。。。。。。。。。。。。设置SqlServer=%dbServer%,但不是working@user3621995,不确定注释中的代码。请参阅更新的答案。这就是你在尝试的吗?它确实有效,谢谢你的回复。以前的问题与文件编码有关,对于“set”,它在前面添加了一些特殊字符,因此不能识别为命令。我创建了另一个批处理文件,并复制了所有内容,它成功了。此脚本是否仅搜索标记,即以空格分隔的开始字符串?我还有另一个例子,我需要将“本地主机”替换为%DbServer %,但是脚本不起作用,我认为它不能找到“数据库服务器”,因为它在一个令牌的中间,对吧?