Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 以folderPath为参数的nAnt running.bat_Batch File_Nant - Fatal编程技术网

Batch file 以folderPath为参数的nAnt running.bat

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

我正在尝试设置一个nAnt任务来运行带有4个参数的批处理文件。前两个参数是文件夹路径,所以需要用双引号包装。这是我的构建文件

<?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:&quot;${bar.path}&quot;" />
</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:&quot;${bar.path}&quot;" />
</exec>