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

use*_*995 2 replace batch-file line

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

SQLSERVER =本地主机

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

SQLSERVER = MYMACHINE\sql2012

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

如果您留下一些评论,将会非常有帮助.

提前致谢

MC *_* ND 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
Run Code Online (Sandbox Code Playgroud)

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

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


Mar*_*ell 5

你可以这样做:

FINDSTR /I /V /B "sqlServer=" config.txt > config.new
ECHO sqlServer=myMachine\sql2012 >> config.new
DEL config.txt
REN config.new config.txt
Run Code Online (Sandbox Code Playgroud)

FINDSTR会删除与启动所有线路sqlServer=,并创建一个名为新文件newfile.

最后ECHO会添加一行sqlServer=MyMachine\sql2012.

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