我搜索过一千个例子并尝试过,但它们都没有真正适合我。我的要求非常简单,我有一个文件 - config.txt,它有一行:
SQLSERVER =本地主机
我正在尝试将此行更新为:
SQLSERVER = MYMACHINE \ sql2012
我在网上查看了一些例子,其中一些只是使用set变量,或者有些不是替换而是插入。有一些例子是写入新文件,但新文件在每行前面都有行号。我没有找到如何编写批处理脚本的有用指令,并且没有任何更新文件批处理脚本适用于我。
如果您留下一些意见,将会非常有帮助。
提前致谢
答案 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
,并将其替换为前两行的输出。