Batch file 以folderPath为参数的nAnt running.bat
我正在尝试设置一个nAnt任务来运行带有4个参数的批处理文件。前两个参数是文件夹路径,所以需要用双引号包装。这是我的构建文件Batch file 以folderPath为参数的nAnt running.bat,batch-file,nant,Batch File,Nant,我正在尝试设置一个nAnt任务来运行带有4个参数的批处理文件。前两个参数是文件夹路径,所以需要用双引号包装。这是我的构建文件 <?xml version="1.0"?> <project name="Proejct" default="dbsetup" > <description>nAnt script</description> <property name="project.SQLBinFolder" value='"C:\P
<?xml version="1.0"?>
<project name="Proejct" default="dbsetup" >
<description>nAnt script</description>
<property name="project.SQLBinFolder" value='"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\"' />
<property name="project.SQLDataFolder" value='"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\"' />
<property name="project.DBServerName" value="JJADEJA-VISTA-P\SQLEXPRESS" />
<property name="project.DatabaseName" value="dbMain" />
<target name="test">
<echo message="..\Database\RunDBSQL.bat ${project.SQLBinFolder} ${project.SQLDataFolder} ${project.DBServerName} ${project.DatabaseName}" />
</target>
<target name="dbsetup" description="Setup database script">
<exec program="..\Database\RunDBSQL.bat" >
<arg value="${project.SQLBinFolder}" />
<arg value="${project.SQLDataFolder}" />
<arg value="${project.DBServerName}" />
<arg value="${project.DatabaseName}" />
</exec>
</target>
</project>
这在命令行中运行良好
当我运行dbsetup target时,它会给出以下错误
dbsetup:
[exec] Files\Microsoft was unexpected at this time.
BUILD FAILED - 0 non-fatal error(s), 1 warning(s)
c:\Projects\CIMA\Trunk\Solution file\CIMA.build(15,6):
External Program Failed: c:\Projects\CIMA\Trunk\Database\RunDBSQL.bat (return co
de was 255)
Total time: 0.1 seconds.
我的RunDBSQL.bat
SET SQLBinFolder="%1"
SET SQLDataFolder="%2"
SET DBServerName=%3
SET DatabaseName=%4
SET PATH="%1%"
cls
echo.
echo *****************************
echo * Database build and update *
echo *****************************
echo.
echo SQLCmd Exe Path : %SQLBinFolder%
echo SQL Data Folder Path : %SQLDataFolder%
echo Database server: %DBServerName%
echo Database name : %DatabaseName%
echo.
我尝试用各种包装/转义组合包装我的变量和属性,但没有成功。任何人有任何建议或想法,请让我知道
提前感谢,,
Jay我相信如果你用
“
如果你看看这个答案的编辑历史记录,你会发现我的第一个猜测是多么的错误。你需要的不是更多的报价,而是更少的报价。如果arg
节点的value
属性是包含空格的路径,则会自动引用该属性
<?xml version="1.0"?>
<project name="Proejct" default="dbsetup" >
<description>nAnt script</description>
<property name="project.SQLBinFolder" value="C:\Program Files\Microsoft SQL Server\90\Tools\Binn\" />
<property name="project.SQLDataFolder" value="C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\" />
<property name="project.DBServerName" value="JJADEJA-VISTA-P\SQLEXPRESS" />
<property name="project.DatabaseName" value="dbMain" />
...
<target name="dbsetup" description="Setup database script">
<exec program="..\Database\RunDBSQL.bat" >
<arg value="${project.SQLBinFolder}" />
<arg value="${project.SQLDataFolder}" />
<arg value="${project.DBServerName}" />
<arg value="${project.DatabaseName}" />
</exec>
</target>
</project>
注意事项:如果参数的值是由命令行开关和包含空格的路径组合而成的,NAnt的自动报价功能将无法工作。例如:
<property name="bar.path" value="C:\Program Files\bar" />
<exec program="foo.bat" >
<arg value="-f:${bar.path}" />
</exec>
这就是我建议明确引用的想法:
<property name="bar.path" value="C:\Program Files\bar" />
<exec program="foo.bat" >
<arg value="-f:"${bar.path}"" />
</exec>
我试过这个,但运气不好。即使在尝试了不同的选项之后,我也可以使用脚本(但它似乎是在传递参数而不使用引号)。或者犯同样的错误。你是对的,杰。我更新了我的答案(嗯,与其说是更新,不如说是完全重写)。现在应该可以了。。。。只是好奇:你试过正确的建议吗?它有用吗?
<property name="bar.path" value="C:\Program Files\bar" />
<exec program="foo.bat" >
<arg value="-f:${bar.path}" />
</exec>
<property name="bar.path" value="C:\Program Files\bar" />
<exec program="foo.bat" >
<arg value="-f:"${bar.path}"" />
</exec>