Я думаю, что нашел два способа решения проблемы. Вместо преобразования пути в путь DOS (имя 8.3) я могу использовать кавычки вокруг моих аргументов. Второй метод, такой как ovado , рекомендуется использовать для значения одного аргумента. Вот мой тестовый пример. Все тестовые файлы находятся в моей папке C: \ Test . Сначала я создал тестовую летучую мышь:
@REM This is the content of Test.bat file.
@echo COMMAND PARAMETERS: %*
@echo FIRST PARAMETER: %1
@echo SECOND PARAMETER: %2
dir %1
Затем я создал тестовый файл сборки (Test.Build) "
<project>
<target name="Test" description="Test with one line" failonerror="true">
<property name="App.dir" value ="C:\Program Files"/>
<exec program="test.bat" workingdir=".">
<arg line='"${App.dir}\Microsoft*.*" ${App.dir}\test2 /test3' />
</exec>
</target>
<target name="Test2" description="Test2 with values" failonerror="true">
<property name="App.dir" value ="C:\Program Files"/>
<exec program="test.bat" workingdir=".">
<arg value="${App.dir}\Microsoft*.*" />
<arg value="${App.dir}\test2" />
<arg value="/test3" />
</exec>
</target>
</project>
Здесь я использовал ", чтобы закрыть свой первый аргумент в . Обратите внимание, что я использовал одинарную кавычку для своего атрибута line .
Таким образом, я запускаю свою сборку NANT.EXE . Я получил результат, как и ожидал:
C:\Test>NANT.exe -buildfile:test.build Test
Test:
[exec] COMMAND PARAMETERS: "C:\Program Files\Microsoft*.*" C:\Program Files\test2 /test3
[exec] FIRST PARAMETER: "C:\Program Files\Microsoft*.*"
[exec] SECOND PARAMETER: C:\Program
[exec] C:\Test\>dir "C:\Program Files\Microsoft*.*"
[exec] Volume in drive C has...
....
Я получил тот же результат с альтернативным Test2,
C:\Test>NANT.exe -buildfile:test.build Test2
...