我希望能够替换属性文件中的一行,但我只能在任何时候知道部分行字符串
继承我要替换的行: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 =所需的完整字符串,因为等于更改后的部分
非常感谢任何帮助?
答案 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
关于上述内容的几点说明:
FOR
循环将跳过空行,以便从新输出文件中删除它们。如果需要空白,可以使用FIND
命令使用技巧。%
或!
) - 此可能会导致一些问题,但如果您只是"正常"文字然后应该没问题。