从BAT脚本将文件路径传递给ANT

时间:2009-11-03 16:08:53

标签: ant batch-file

我正在尝试从Windows(右键单击)文件上下文菜单中调用ANT目标。

我已设置注册表项以调用调用我的ANT EXEC目标的批处理脚本。

我需要将文件的路径(用户右键单击)传递给我的ANT目标。所以我使用%~dp1在我的bat脚本中设置ANT属性:

Set tobeusedfilepath=%~dp1
Set tobeusedfile=%~n1

导致:

tobeusedfilepath=D:\Project\Rel L\
tobeusedfile=file

问题是%~dp1返回一个带有“\”的字符串作为文件分隔符。但ANT EXEC任务需要“/”

 [exec] '-source'
 [exec] 'D:ProjectRel L/file'
 [exec] ......
 [exec] The file, 'D:ProjectRel L/file', does not exist.

有关如何绕过此路径分隔符的任何建议吗?

2 个答案:

答案 0 :(得分:3)

set AntPath="D:\Project\Rel L\"
set AntPath=%AntPath:\=/%
set AntPath=%AntPath::/=:%

给出

设置AntPath =“D:\ Project \ Rel L \”

设置AntPath =“D:/ Project / Rel L /”

设置AntPath =“D:Project / Rel L /”

答案 1 :(得分:2)

如果您在Windows上运行,Ant将很乐意接受\的操作系统目录分隔符。 在检查程序输出后,我发现缺少路径分隔符:D:ProjectRel而不是D:\Project\Rel。我可能只是猜测你正在尝试exec Cygwin 计划。 Cygwin程序将使用\作为转义字符。因此,您需要使用<pathconvert>属性来调整目录分隔符。

下面的代码段说明了如何执行此操作

<property name="tobeusedfilepath" location="D:\Project\Rel L\"/>
<property name="tobeusedfile" value="file"/>

<property name="system-path-filename"
  location="${tobeusedfilepath}/${tobeusedfile}"
/>

<pathconvert property="unixized-filename" targetos="unix">
  <path location="${system-path-filename}"/>
</pathconvert>

<echo message="system-path-filename=${system-path-filename}"/>
<echo message="unixized-filename=${unixized-filename}"/>

以下是此次运行的输出:

[echo] system-path-filename=D:\Project\Rel L\file
[echo] unixized-filename=D:/Project/Rel L/file