批处理文件用新行替换文本文件中的行

时间:2016-02-05 13:05:00

标签: batch-file replace find

我希望能够替换属性文件中的一行,但我只能在任何时候知道部分行字符串

继承我要替换的行:mb.datasource.password=ENC(8dF45fdD)

mb.datasource.password=apassword

我现在刚才是这个

@echo off &setlocal
set "search=mb.datasource.password="
set "replace=mb.datasource.password=apassword"
set "textfile=mb.properties"
set "newfile=mb-new.properties"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"

这最终给了我mb.datasource.password = apassword = ENC(8fFdeUdK)

我不能只找到mb.datasource.password =所需的完整字符串,因为等于更改后的部分

非常感谢任何帮助?

1 个答案:

答案 0 :(得分:0)

您可以批量执行此操作。我整理了一个快速的脚本,它对我有用:

@ECHO OFF
SETLOCAL EnableExtensions

SET SourceFile="mb.properties"
SET OutputFile="mb-new.properties"
SET "FindKey=mb.datasource.password"
SET "NewValue=apassword"

REM Basic parse for INI file format.
(FOR /F "usebackq eol= tokens=1,* delims==" %%A IN (`TYPE %SourceFile%`) DO (

    REM If the key value matches, build the line with the new value.
    REM Otherwise write out the existing value.
    IF /I "%%A"=="%FindKey%" (
        ECHO %%A=%NewValue%
    ) ELSE (
        ECHO %%A=%%B
    )

)) > %OutputFile%

REM Replace old with new.
DEL %SourceFile%
MOVE %OutputFile% %SourceFile%

ENDLOCAL

关于上述内容的几点说明:

  • 我假设基本的INI文件格式。
  • FOR循环将跳过空行,以便从新输出文件中删除它们。如果需要空白,可以使用FIND命令使用技巧。
  • 如果您有特殊字符(尤其是%!) - 此可能会导致一些问题,但如果您只是"正常"文字然后应该没问题。