我尝试运行的Windows批处理文件包含以下分配:
set ANT_HOME="C:/Program Files/apache-ant-1.8.4"
Run Code Online (Sandbox Code Playgroud)
违规行是:
call %ANT_HOME%/bin/ant -f ../config/common.xml start_db
Run Code Online (Sandbox Code Playgroud)
当我使用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.
Run Code Online (Sandbox Code Playgroud)
在蚂蚁之后,我已经将第二个引号移动到路径的末尾,但是我收到了相同的错误消息.
如果ant是一个.exe,我会说你的代码应该有效.但我怀疑ant是一个批处理文件,并且错误发生在ant脚本中.
我的结论基于你的错误信息 - 特别是它的以下部分:""=="".错误消息是批处理解析错误,我不知道您的代码如何生成这些字符.所以我认为ant必须是导致问题的批处理脚本.
我怀疑ant.bat @echo off位于顶部,所以你没有看到失败的实际行.
无法访问ant.bat脚本,我无法准确诊断出什么是失败的,我也无法猜测如何修复它.
更新 - 找到确切的问题
我在网上找到了ant.bat的副本.
它具有以下代码行:
if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
Run Code Online (Sandbox Code Playgroud)
您对ANT_HOME的定义包括引号,因此代码正在尝试执行
if ""C:/Program Files/apache-ant-1.8.4""=="" set ANT_HOME=%DEFAULT_ANT_HOME%
Run Code Online (Sandbox Code Playgroud)
空格未引用,您有错误.
解决所有问题所需要做的就是从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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)