我正在尝试从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.
有关如何绕过此路径分隔符的任何建议吗?
答案 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