我的批处理脚本报告错误,指出"此时意外"

1 batch-file

我尝试运行的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)

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

dbe*_*ham 5

如果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)