1

我尝试运行的 Windows 批处理文件包含以下分配:

set ANT_HOME="C:/Program Files/apache-ant-1.8.4"

违规行是:

call %ANT_HOME%/bin/ant -f ../config/common.xml start_db

当我运行带有 echo 的脚本时,我得到:

call "C:/Program_Files/apache-ant-1.8.4"/bin/ant -f ../config/common.xml start_db
Files/apache-ant-1.8.4""=="" was unexpected at this time.

我已经将第二个引号移到了路径的末尾,在蚂蚁之后,但我收到了相同的错误消息。

4

2 回答 2

5

如果 ant 是一个 .exe,我会说你的代码应该可以工作。但我怀疑 ant 是一个批处理文件,并且错误发生在 ant 脚本中。

我的结论基于您的错误消息 - 特别是它的以下部分:""=="". 错误消息是批处理解析错误,我看不出您的代码如何生成这些字符。所以我认为 ant 一定是导致问题的批处理脚本。

我怀疑 ant.bat@echo off位于顶部,因此您看不到实际失败的行。

由于无法访问 ant.bat 脚本,我无法准确诊断出失败的原因,也无法猜测如何修复它。

更新 - 找到确切的问题

我在网上找到了一份ant.bat

它包含以下代码行:

if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%

您对 ANT_HOME 的定义包括引号,因此代码正在尝试执行

if ""C:/Program Files/apache-ant-1.8.4""=="" set ANT_HOME=%DEFAULT_ANT_HOME%

空格没有被引用,你有你的错误。

修复所有问题所需要做的就是从 ANT_HOME 的定义中删除引号,然后在 CALL 语句中添加引号:

set "ANT_HOME=C:/Program Files/apache-ant-1.8.4"
call "%ANT_HOME%/bin/ant" -f ../config/common.xml start_db

正斜杠作为 Windows 中的文件夹分隔符并不总是可靠的。请参阅为什么 Windows 上的 cmd.exe shell 使用正斜杠 ('/'') 路径分隔符的路径失败?.

最好使用反斜杠。

set "ANT_HOME=C:\Program Files\apache-ant-1.8.4"
call "%ANT_HOME%\bin\ant" -f ..\config\common.xml start_db
于 2012-10-01T02:30:43.110 回答
2

引号必须完全包围文件名。您不能将它们用于部分名称。试试这个:

set ANT_HOME=C:\Program Files\apache-ant-1.8.4
call "%ANT_HOME%\bin\ant" -f ../config/common.xml start_db

哦,我把你的一些斜杠改成了反斜杠(DOS 不喜欢正斜杠)。我假设你被允许/在你传递的那个参数中使用。

于 2012-10-01T01:56:26.177 回答