【发布时间】:2018-11-15 12:28:36
【问题描述】:
我正在尝试通过执行脚本来修改我的 csm.properties 中的某个属性。 我查了很多,最后找到了这段代码。
set "search=CLASSPATH"
set "insert=CLASSPATH^=plugins^/Numbering.jar^\^:"
set "textFile="%workingPlace%bin\csm.properties""
FOR /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
FOR /f "tokens=1*delims==" %%g IN ("%%i") DO (
IF /i "%%g" == %search% (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%search%=%insert%!
endlocal
)ELSE (
%%i
)
)
)
此代码应读取我文件中的每一行并使用= 作为分隔符。如果代码将“CLASSPATH”作为属性,则应修改该行。
但似乎找不到 CLASSPATH。
这就是 csm.properties 的样子:
#Tue Jul 10 08:50:23 CEST 2018
JAVA_ARGS=-Xmx20000M -DLOCALCONFIG\=true -splash\:data/splash.png -Dmd.class.path\=$java.class.path -Dcom.nomagic.osgi.config.dir\=configuration -Desi.system.config\=data/application.conf -Dlogback.configurationFile\=data/logback.xml -Dsun.locale.formatasdefault\=true -Dinitial.user.language\=de
JAVA_HOME=jre1.8.0_152
BOOT_CLASSPATH=lib/xalan.jar
MAIN_CLASS=com.nomagic.osgi.launcher.ProductionFrameworkLauncher
MAC_JAVA_ARGS="-Xdock\:name\=Cameo Systems Modeler" -Xdock\:icon\=bin/md.icns -Dapple.laf.useScreenMenuBar\=true
APP_ARGS=
DEFAULT_MEMORY_SETTINGS_64=-Xmx[30%,1200,4000]M
DEFAULT_MEMORY_SETTINGS_32=-Xmx800M
CLASSPATH=lib/patch.jar\:lib/brand_api.jar
CONSOLE=false
修改后CLASSPATH应该是这样的:
CLASSPATH=plugins/Numbering.jar\:lib/patch.jar\:lib/brand_api.jar
【问题讨论】:
-
不幸的是,我不允许使用 powershell。因此,将结果流水线化到一个新文件并用最新的文件覆盖旧文件,我希望能完成这项工作吗?
-
那么,如果我在第一个循环中使用我的 delims 和 tokens,结果会一样吗?
-
我可以进行批处理,但它需要写入一个新文件,然后删除旧文件并重命名新文件。你想要的结果相同。
-
我很想看看你的解决方案。
-
还有关于我的 2 个 for 循环。我想,因为
) ELSE ( %%i )行,我需要它们。如果我没有这两个循环%%i只会返回=之前的字符串
标签: batch-file cmd insert