2017-02-13 4 views
1

я делаю пакетный файл для компиляции некоторых DLL, а также я застрял на простую, но незаметную ошибке ...Batch Ошибка: «(не ожидались в это время»

Ну, это просто Я не могу понять, почему 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

Да, вы, скорее всего, увидите, где ошибка. Удалите '@echo off', откройте приглашение cmd и выполните пакетный файл из командной строки вместо двойного щелчка мышью. – Squashman

+0

Вы не можете использовать 'GOTO' следующим образом:' goto: callcompile '% cpath% ""% order% "'. Вы ничего не передаете своей подпрограмме. Также вам нужно указать переменную cpath с задержкой расширения. – Squashman

+0

Этот сценарий вернул мне то, что вы предложили @Squashman: http://pastebin.com/DkB2RsZv – z3nth10n

ответ

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" " 
+0

'cmd/C script.bat "C: \ path with spaces" 'должен работать просто отлично ... – aschipfl