1

我正在做一个批处理文件来编译一些 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

此外,无论如何,是否可以看到错误导致问题的确切行?

4

1 回答 1

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" "
于 2017-02-13T21:04:24.700 回答