【发布时间】:2014-12-22 14:41:29
【问题描述】:
我正在尝试在文件中查找字符串并将其替换为另一个字符串。
我有一个 XML 文件,其中 port= 存在于多个位置。每个端口都有不同的值,例如 port="443" 和 port="8011"。
我想找到一个特定的port 及其值。 port 的当前值在批处理执行时未知,因为该值会发生变化。此变量和 XML 文件中一个特定 port 属性的批处理执行未知值应替换为我作为参数传递给批处理文件的新值。
如何从文件中找到特定的 port 值并将其替换为新值?
我已使用以下代码替换字符串,但我无法更改其值。
if EXIST %ConfPath% (echo "here") ELSE (
for /f "tokens=1,* delims=¶" %%A in ( '"type %file%"' ) do (
SET string=%%A
SET modified=!string:%oldport%=%newport%!
echo !modified!
)
)
编辑:
这是我的 XML 文件:
<?xml version='1.0' encoding='utf-8'?>
<Server port="first" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="second" redirectPort="forth" />
<Connector port="third" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8" keystoreFile="myKey" keystorePass="myPass" />
</Service>
</Server>
上述文件中有四个端口。
我想将port="third" 更改为port="newPort"。
直到现在我已经替换了字符串,但我无法将它与剩余的文件连接起来。
首先我得到行号,然后用引号分割并替换。但我无法连接它。有东西不见了,但我找不到。
我的批号是:
for /f "tokens=1,* delims=" %%A in ( '"type %file%"' ) do (
SET /a line+=1
IF !line!==11 (
SET string=%%A
for /f tokens^=2^ delims^=^" %%I in ( "!string!" ) do (set repPort=%%I)
SET modified=!string:repPort=PORT!
)
echo !modified!
)
这是正确的方法吗?我该如何连接?
【问题讨论】:
-
为了节省时间,这里是jrepl.bat 和GnuWin32 sed 的必填链接,这些链接通常出现在这些“如何替换文本文件中的文本”问题中。
-
你试过
>>newfile.xml echo !modified!吗?您是否还打算从 ¶ 剥离每一行的行尾? -
@rojo thnx rojo!!是的,我打算在每一行上剥离到行尾。另外我想从多个文本中查找和替换特定文本。
-
@Mofi thxn mofi!!它与您提到但不重复的链接有关,因为我不想用另一个替换每个匹配项,但我想替换一个特定匹配项。
标签: batch-file scripting window