我在做这件事时遇到了麻烦。
有 1 个包含此行的批处理文件:
设置 TEST_DIR=C:\temp\dir1
我只想为 TEST_DIR 设置一些新值
但是,当我在 ant 脚本中使用时,它会转义正斜杠并给出以下结果:
设置 TEST_DIR=C:homedir2
相反,我想给出:
设置 TEST_DIR=C:\home\dir2
我正在使用这个命令:
<replaceregexp file="${MT_BATCH_FILE_LOCATION}\myfile.bat" match="TEST_DIR=C:\\temp\\dir1" replace="TEST_DIR=C:\home\dir2" byline="true" />
您可以使用此替换模式获得您想要的结果:
replace="TEST_DIR=C:\\\\home\\\\dir2"
原因是您必须对正则表达式和 Java 分别转义一次反斜杠 - 反斜杠在这两种上下文中都是转义字符。
回答您随后在评论中提出的问题...
我希望答案是一样的。您需要对值中的反斜杠进行双重转义${new_loc}
,即使用C:\\\\my_projcode
not C:\my_projcode
.
-
如果 new_loc 作为环境变量出现,您可以使用属性正则表达式任务 http://ant-contrib.sourceforge.net/tasks/tasks/propertyregex.html从 ant-contrib 转义值中的反斜杠:
<project default="test">
<!-- import ant-contrib -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="C:/lib/ant-contrib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<target name="test">
<!-- load environment variables -->
<property environment="env"/>
<!-- escape backslashes in new_loc -->
<propertyregex property="loc" input="${env.new_loc}" regexp="\\" replace="\\\\\\\\\\\\\\\\" />
<echo message="env.new_loc: ${env.new_loc}"/>
<echo message="loc: ${loc}"/>
<!-- do the replace -->
<replaceregexp file="test.bat" match="TEST_DIR=C:\\temp\\dir1" replace="TEST_DIR=${loc}\\\\home\\\\dir2" byline="true" />
</target>
Output:
c:\tmp\ant>set new_loc=c:\foo\bar
c:\tmp\ant>ant
Buildfile: c:\tmp\ant\build.xml
test:
[echo] new_loc: c:\foo\bar
[echo] env.new_loc: c:\foo\bar
[echo] loc: c:\\\\foo\\\\bar
BUILD SUCCESSFUL
Total time: 0 seconds
c:\tmp\ant>type test.bat
set TEST_DIR=c:\foo\bar\home\dir2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)