批错误:“(此时未预料到”

时间:2017-02-13 19:00:15

标签: batch-file cmd unexpected-token

我正在编写一个批处理文件来编译一些dll,而且我一直坚持一个简单但不可检测的错误......

嗯,这很简单,我无法弄清楚为什么CMD会给我这个错误,有我的代码:

@echo off
::Call this in case your broke you dll and you cannot start Unity for example

:str
cls
goto :main

:main
echo Hello, well, if you're opening this is because you have done something wrong and you cannot start Unity...
echo.
set /p opt="Do you want to read your path from the 'path.txt' file or do you want to specify? [Y/N] "
echo.
echo Also, this is optional but you can try to establish an order for the compilation.
echo.
echo 1.- Build the API
echo 2.- Build the RAW Scripts
echo 3.- Build the Editor API
echo.
set /p order="Type, for example: [2 1 3], to compile in this order, or the way you want: "

if /i "%opt%" == "Y" (
    for /f "delims=" %%f in ("project_path.txt") do (
        if "%%f" NEQ "" (
            call :callcompile "%%f" "%order%"
        )
    )
) else (
    if /i "%opt%" == "N" (
        echo.
        set /p cpath="Path: "
        goto :callcompile "%cpath%" "%order%"
    ) else (
        goto :str
    )
)
goto :EOF

:callcompile
cmd /c compile.bat "%~1" "%~2"
pause

也许,我错过了一些东西,但我无法看到代码中的任何失败,也许是因为我缺乏经验,无论如何,帮助我解决它,因为我已经包含了所有的条件和一切没有运气可能会造成麻烦。

所有来源都可以在这里看到:https://github.com/Lerp2Dev/Lerp2API/blob/master/Compile/emergency_case.bat

另外,有没有看到错误导致问题的确切行?

1 个答案:

答案 0 :(得分:1)

我没有测试过您的代码,但初看起来您似乎有两个语法错误。

第一个错误是关于GoTo语句,它只接受一个参数,即标签/子例程名称,但是您尝试传递多个参数。您可以使用GoTo代替Call,或将参数设置/保存到变量中,然后调用GoTo仅传递标签名称,最后从变量中读取参数值。

第二个错误,是因为你没有用引号括起CMD参数。

根据需要调用CMD的正确语法如下:

CMD.exe /C "argument"

如果你传入一个表示一个带有包含空格的附加参数的命令的参数,那么它们也必须被包含在内,如下所示:

CMD.exe /C " script.bat "C:\path with spaces" "

或者:

CMD.exe /C " Start /W "" "script.bat" "C:\path with spaces" "

所以试试这样:

CMD.exe /C " "compile.bat" "%~1" "%~2" "