You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用批处理脚本批量更新Property文件中的多个配置值

批处理脚本实现Property配置文件多值更新

我明白你现在需要把原来只能更新单个配置项的批处理脚本,改成支持批量更新多个Property配置值的版本。结合你提供的Batchenv.bat里定义的变量,我帮你调整后的脚本如下:

先回顾现有文件内容

Batchenv.bat

echo off
SET sourcedir=C:\Users\1026478\Desktop\local
SET INSTALL_PROD=Prod
SET APPSERVER_PORT2=44444
SET ABPP_BRE_PATH=D:\\JDA\\JDA2017_3\\config\\JDAv2017_SEMs1\\bre

原test.property

I2_JDK_HOME=D:\\Java8\\jdk1.8.0_181
I2_LICENSE_FILE=D:\\license\\PSA100417.lic
I2_LICENSE_FILE_LOCATION=D:\\license
I2_LICENSE_FILE_NAME=PSA100417.lic
I2_ORACLE_DRIVER=oracle.jdbc.driver.OracleDriver
I2_ORACLE_HOME=D:\\Oracle64\\product\\12.1.0\\client_1
I2_ORACLE_HOST=sl1psadevdb2v.jdadelivers.com
I2_ORACLE_INFO_1=ABPPMGR
I2_ORACLE_INFO_2={E:AES}6AA9880B2F94C92CA09E7665CC4AA76B
I2_ORACLE_INFO_2_XOR=@CQQLFS
I2_ORACLE_INFO_3=PSADVDB
I2_ORACLE_INFO_4=
I2_ORACLE_JAR=D:\\Oracle64\\product\\12.1.0\\client_1\\jdbc\\lib\\ojdbc7.jar
I2_ORACLE_PORT=1521
I2_PLATFORM_HOME=
I2_WEBCLIENT_TYPE=NoWeb
I2_WEBLOGIC_BASE_APP=D:\\JDA\\JDA2017_3\\config\\JDAv2017_SEMs1\\web\\base
I2_WEBLOGIC_DOMAIN_HOME=C:\\bea\\user_projects\\domains\\mydomain
I2_WEBSPHERE_APPNAME=
I2_WEBSPHERE_APPNAME_BASE=base
I2_WEBSPHERE_CONTEXTROOT=
I2_WEBSPHERE_CONTEXTROOT_BASE=/base
I2_WEBSPHERE_HOME=C:\\Program Files\\IBM\\WebSphere\\AppServer
I2_WEBSPHERE_INSTALLABLE=
I2_WEBSPHERE_NODE=
I2_WEB_SERVER_PORT=22246
INSTALLER_UI=SWING
USER_INSTALL_DIR=D:\\JDA\\JDA2017_3\\config\\JDAv2017_SEMs1

修改后的多值更新批处理脚本

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
call %~dp0\Batchenv.bat
SET sourcedir=C:\Users\1026478\Desktop\local

:: 定义需要更新的配置项与对应变量的映射,格式为"配置项=变量名"
SET "updateList=INSTALL_PROD=INSTALL_PROD I2_WEB_SERVER_PORT=APPSERVER_PORT2 ABPP_BRE_PATH=ABPP_BRE_PATH"

(
FOR /f "usebackq delims=" %%a IN ("%sourcedir%\test.Property") DO (
    SET "line=%%a"
    SET "updated=0"
    :: 遍历需要更新的配置项列表
    FOR %%u IN (%updateList%) DO (
        FOR /f "tokens=1,2 delims==" %%g IN ("%%u") DO (
            :: 检查当前行的键是否匹配要更新的配置项
            FOR /f "tokens=1* delims==" %%k IN ("!line!") DO (
                IF /i "%%k"=="%%g" (
                    ECHO(%%g=!%%h!
                    SET "updated=1"
                    GOTO :nextLine
                )
            )
        )
    )
    :: 如果没有匹配到更新项,输出原行
    IF !updated! EQU 0 ECHO(!line!
    :nextLine
)
)>newfile.property

:: 覆盖原配置文件
MOVE /y newfile.Property "%sourcedir%\test.Property"
GOTO :EOF

脚本关键点说明

  • 配置项映射列表:通过updateList变量定义要更新的配置项和对应的环境变量,比如I2_WEB_SERVER_PORT=APPSERVER_PORT2表示把test.property里的I2_WEB_SERVER_PORT值替换成Batchenv.batAPPSERVER_PORT2的变量值
  • 延迟扩展:启用ENABLEDELAYEDEXPANSION后,用!变量名!的方式读取变量,避免循环中变量替换的逻辑问题
  • 逐行检查更新:遍历配置文件的每一行,对比是否在更新列表中,匹配则替换值,不匹配则保留原行
  • 覆盖原文件:生成新文件后用MOVE /y强制覆盖原配置文件,确保修改生效

效果验证

运行这个脚本后,test.property里的:

  • INSTALL_PROD会被更新为Prod
  • I2_WEB_SERVER_PORT会被更新为44444
  • 如果后续需要新增配置项或者调整更新列表,直接修改updateList里的映射内容即可

内容的提问来源于stack exchange,提问作者Python code

火山引擎 最新活动