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

时间:2014-05-09 22:01:49

标签: batch-file replace line

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

SQLSERVER =本地主机

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

SQLSERVER = MYMACHINE \ sql2012

我在网上查看了一些例子,其中一些只是使用set变量,或者有些不是替换而是插入。有一些例子是写入新文件,但新文件在每行前面都有行号。我没有找到如何编写批处理脚本的有用指令,并且没有任何更新文件批处理脚本适用于我。

如果您留下一些意见,将会非常有帮助。

提前致谢

2 个答案:

答案 0 :(得分:7)

已编辑 - 以适应评论

@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

逐行读取输入文件(for /f %%l),然后拆分每行(for /f %%a),如果行中的第一个标记是" sqlserver"然后替换该行,否则将原始行发送到文件。

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

答案 1 :(得分:5)

你可以这样做:

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,并将其替换为前两行的输出。