我正在编写一个批处理文件来编译一些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
另外,有没有看到错误导致问题的确切行?
答案 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" "