替换字符串 DIR 位置时使用 Replaceregexp 时出现问题

2024-05-11

我在做这件事时遇到了麻烦。 有 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 分别转义一次反斜杠 - 反斜杠在这两种上下文中都是转义字符。

回答您随后在评论中提出的问题...

  1. 我希望答案是一样的。您需要对值中的反斜杠进行双重转义${new_loc},即使用C:\\\\my_projcode not C:\my_projcode.

  2. 如果 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(使用前将#替换为@)

替换字符串 DIR 位置时使用 Replaceregexp 时出现问题 的相关文章

随机推荐

  • DynamoDB 中条件写入的日期时间比较

    我目前正在使用 DynamoDB 如果该记录的日期早于新记录日期字段 我想使用条件写入来更新该记录 有没有办法比较条件写入的 DateTime 类型 或者目前仅适用于整数 字符串和流 Thanks 既然你提到你正在使用ISO 8601 ht
  • 从节点使用 TypeScript 编译器

    使用咖啡脚本可以很容易地做到这一点 var coffee require coffee script coffee compile a 1 gt function n var a n n a 1 n n call this n 有没有办法用
  • 检索旋转的 UIImageView 的所有 4 个坐标

    如何获取 UIImageView 的 4 个坐标 我知道可以得到CGRect以及origin x和origin y 但是如何找到所有4个角呢 编辑 我正在旋转 UIImageViews 这就是我问的原因 P 您可以添加矩形的宽度和高度来获取
  • 红宝石和纱线

    I have an error with my RoR project when I try to start it using Run shift f10 但是当我使用启动服务器时rails s在控制台中 它有效 Your Yarn pa
  • OpenCV 3 中的 FLANN 错误

    我运行的是 Ubuntu 14 04 我正在尝试使用 openCV 3 运行 FLANN 但出现错误 下面的所有内容都是通过使用 AKAZE 和 ORB 进行尝试的 但代码来自我尝试使用 ORB 的情况 我使用 ORB 来查找描述符和关键点
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • 使用动画来滑动视图

    我有一个可以识别滑动手势 向上和向下 的 FrameLayout 例如 如果执行向上滑动 我应该对当前视图 即 MATCH PARENT x MATCH PARENT 进行动画处理 使其向上移动 同时新视图来自底部 我可以用动画来实现这一点
  • UIView transitionFromView:如何在转换过程中实现黑色背景?

    我使用下一个代码 UIView transitionFromView viewA toView viewB duration 1 0 options UIViewAnimationOptionTransitionFlipFromLeft c
  • 在 Locust 中通过顺序任务将数据从一个任务函数逐一传递到另一个任务函数时出现问题

    我们正在尝试实现一种基于用户场景的负载测试 它基本上在一个 url 中创建一个订单 然后我们必须在下一个 url 中传递订单 id 来获取该订单的状态 我们正在使用 Locust 顺序任务 因为我们希望它按第一个请求 gt 第二个请求 gt
  • 强制绑定更新 Silverlight

    如何强制更新我的对象 DataContext 绑定 我正在网格上使用事件 并且在事件触发之前不会处理绑定更新 有什么廉价的技巧可以解决这个问题吗 最后 我总是可以用旧的手动方式从文本框中获取值并更新我的对象 但最好让绑定为我做这件事 UPD
  • 如何显示AVPictureInPictureController?

    我正在尝试使用播放视频AV画中画控制器最近在IOS9 使用此代码 AVPlayer AVPlayer AVPlayer playerWithURL url AVPlayerLayer layer AVPlayerLayer playerLa
  • 从另一个文件覆盖函数中的变量

    一 总结 我不知道如何从另一个文件覆盖函数中的变量 2 示例 2 1 配置 I use logbook http logbook pocoo org and pyfancy https github com ilovecode1 Pyfan
  • Apache mod_speling 不区分大小写的 URL 问题

    我想要使 用 Apache 的不区分大小写的 URLmod speling模块 但这会产生不需要的 多个选项 列表 而 Apache 文档说 设置后 该指令将拼写更正的操作限制为小写 大写更改 不执行其他可能的更正 我正在全新安装的 Apa
  • 签名根框架中嵌入的子框架不起作用(Xcode 11.2.1)

    我有一个小型的概念验证应用程序 我试图在我的框架 AequumPOCFramework framework 中嵌入 并签名 一个框架 Alamofire 但是 当我尝试部署到我的设备时 它不断给出我的错误 在使用库验证的进程中使用无效 映射
  • 如何在鼠标悬停时突出显示 MahApps.Metro 的图块?

    我刚刚发现了一个非常出色的 WPF UI 工具包 MahApps Metro 我创建了一个带有 MahApps Metro Controls Tile 类型的图块的窗口 当鼠标经过时 我无法找到突出显示图块的正确方法 你知道我该怎么做吗 我
  • 如何在gradle中复制文件?

    我正在尝试将战争档案部署到 Tomcat 中 这是我编写的构建脚本 apply plugin war task deploy dependsOn war copy from build libs into E apache tomcat 8
  • 使用正则表达式检查整个字符串

    我正在尝试检查字符串是否是数字 因此正则表达式 d 似乎不错 然而 由于某种原因 该正则表达式也适合 78 46 92 168 8000 这是我不想要的 一些代码 class Foo rex re compile d def bar sel
  • 我可以说服 GCC 通过存储的函数指针内联延迟调用吗?

    当然 当内部函数调用在该范围内直接已知时 C 编译器可以内联从函数模板内进行的函数调用 ref https stackoverflow com q 4860762 560648 include
  • libSDL、CMake 和 Mac OS X Lion

    我正在尝试在我的Mac上编译cmake项目 但它取决于SDL框架 我安装了这个框架 在 cmake 之后向我报告找不到 libSDL 我自己设置了以下导出变量 按照 cmake 的建议 export SDL INCLUDE DIR Libr
  • 替换字符串 DIR 位置时使用 Replaceregexp 时出现问题

    我在做这件事时遇到了麻烦 有 1 个包含此行的批处理文件 设置 TEST DIR C temp dir1 我只想为 TEST DIR 设置一些新值 但是 当我在 ant 脚本中使用时 它会转义正斜杠并给出以下结果 设置 TEST DIR C