Это простой сценарий, который я написал, ничего особенного

@echo off

echo 1 = stream1 source
echo 2 = stream1 high
echo 3 = stream1 medium
echo 4 = stream1 low
echo 5 = stream2 source
echo 6 = stream2 high
echo 7 = stream2 medium
echo 8 = stream2 low

set /p id="Enter ID: "

IF %id% == 1 (
    set link=twitch.tv/stream1 source
) ELSE IF %id% == 2 (
    set link=twitch.tv/stream1 high
) ELSE IF %id% == 3 (
    set link=twitch.tv/stream1 medium
) ELSE IF %id% == 4 (
    set link=twitch.tv/stream1 low
) ELSE IF %id% == 5 (
    set link=twitch.tv/stream2 source
) ELSE IF %id% == 6 (
    set link=twitch.tv/stream2 high
) ELSE IF %id% == 7 (
    set link=twitch.tv/stream2 medium
) ELSE IF %id% == 8 (
    set link=twitch.tv/stream1 high
) ELSE (
echo ..............
echo 1 = source
echo 2 = high
echo 3 = medium
echo 4 = low

set /p quality="Enter ID: "

    IF %quality% == 1 (
        set hq="source"
    ) ELSE IF %quality% == 2 (
        set hq="high"
    ) ELSE IF %quality% == 3 (
        set hq="medium"
    ) ELSE IF %quality% == 4 (
        set hq="low"
    ) ELSE (
        set hq="source"
    )
    set link=twitch.tv/%id% %hq%
)

Start C:\livestreamer\livestreamer.exe %link%

echo %link%

pause

Он запрашивает число 1-8, если оно 1-8, оно запускает программу livestream.exe с командной строкой stream1 source, stream2 source и т.д., В зависимости от того, что вводит пользователь.

Если это не 1-8, то программа запрашивает качество, поэтому источник / высокий / средний / низкий.

Например, если они введут 1, то команда, которая будет запущена, будет

Start C:\livestreamer\livestreamer.exe stream1 source

Если 2,

Start C:\livestreamer\livestreamer.exe stream1 high

так далее

Если они вставили, например, asdfasdf

тогда ставь высоко, тогда финал будет

Start C:\livestreamer\livestreamer.exe asdfasdf high

Это работает, если я удаляю вещи внутри последнего условия else, но в противном случае это не так :(

Я получаю ошибку

( was unexpected at this time.

2 ответа2

0

Похоже, вам нужно изменить операторы типа% id% == 1 на форму "% id%" == "1".

Когда макропеременная (например,% id%) установлена в пробел, она расширяется до: IF space == 1 (что не является допустимым синтаксисом. Но если вы окружаете переменную макроса некоторым набором символов (я обычно использую двойные кавычки), оператор расширяется до IF « space » == 1 (который является допустимым синтаксисом, но не соответствует вашим намерениям. Чтобы заставить его работать, вы должны окружить значение сравнения одним и тем же символом (в этом случае двойные кавычки).

IF "%id%"=="1"

IF "%id%"=="1" (
    set link=twitch.tv/stream1 source
) ELSE IF "%id%"=="2" (
    set link=twitch.tv/stream1 high
) ELSE IF "%id%"=="3" (
    set link=twitch.tv/stream1 medium
...

    IF "%quality%"=="1" (
        set hq="source"
    ) ELSE IF "%quality%"=="2" (
        set hq="high"
    ...
0

Строка, которая терпит неудачу, является IF %quality% == 1 .

В то время как пакетный файл логически выполняет только вложенный If в одной ветви, весь оператор If обрабатывается как одна команда, поэтому вся команда должна быть действительной во всех ветвях. Ваше заявление If (в целом) недействительно на момент обработки.

Если вы включите Echo, вы увидите, что строка не работает как

( was unexpected at this time.
C:\Temp>    IF  == 1 (

Обратите внимание на часть, которая потерпела неудачу: IF == 1 ( .

Это неверно, потому что нет левой стороны для сравнения. Там нет левой стороны сравнения, потому что set для присвоения значения переменной quality не был выполнен до обработки If (так как он вложен в If).

Исправление:

Обе стороны всех сравнений должны быть заключены в кавычки, чтобы пустое значение было "" вместо простого пробела.

Например:

IF "%id%" == "1" (
    set link=twitch.tv/stream1 source
) ELSE IF "%id%" == "2" (
    set link=twitch.tv/stream1 high
) ELSE IF "%id%" == "3" (
    set link=twitch.tv/stream1 medium
) ELSE IF "%id%" == "4" (
    set link=twitch.tv/stream1 low
) ELSE IF "%id%" == "5" (
    set link=twitch.tv/stream2 source
) ELSE IF "%id%" == "6" (
    set link=twitch.tv/stream2 high
) ELSE IF "%id%" == "7" (
    set link=twitch.tv/stream2 medium
) ELSE IF "%id%" == "8" (
    set link=twitch.tv/stream1 high
) ELSE (...

Другое исправление:

Переместите вложенный If в его собственный помеченный раздел и используйте операторы Goto для направления потока.

@echo off

echo 1 = stream1 source
echo 2 = stream1 high
echo 3 = stream1 medium
echo 4 = stream1 low
echo 5 = stream2 source
echo 6 = stream2 high
echo 7 = stream2 medium
echo 8 = stream2 low

set /p id="Enter ID: "

IF %id% == 1 (
    set link=twitch.tv/stream1 source
) ELSE IF %id% == 2 (
    set link=twitch.tv/stream1 high
) ELSE IF %id% == 3 (
    set link=twitch.tv/stream1 medium
) ELSE IF %id% == 4 (
    set link=twitch.tv/stream1 low
) ELSE IF %id% == 5 (
    set link=twitch.tv/stream2 source
) ELSE IF %id% == 6 (
    set link=twitch.tv/stream2 high
) ELSE IF %id% == 7 (
    set link=twitch.tv/stream2 medium
) ELSE IF %id% == 8 (
    set link=twitch.tv/stream1 high
) ELSE (
    goto ChooseQuality
)

goto StartProgram


:ChooseQuality

echo ..............
echo 1 = source
echo 2 = high
echo 3 = medium
echo 4 = low

set /p quality="Enter ID: "

IF %quality% == 1 (
    set hq="source"
) ELSE IF %quality% == 2 (
    set hq="high"
) ELSE IF %quality% == 3 (
    set hq="medium"
) ELSE IF %quality% == 4 (
    set hq="low"
) ELSE (
    set hq="source"
)
set link=twitch.tv/%id% %hq%

goto StartProgram


:StartProgram

Start C:\livestreamer\livestreamer.exe %link%

echo %link%

pause

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .