2016-04-02 3 views
1

У меня проблема.Batch-I хочу установить вторую часть переменной

set /p command= 
if %command% == "display (i want the second part of the variable here)" echo (second part of the variable) 

Например, я типа:

display hello 

Я хочу, чтобы это просто:

echo hello 

Я хочу использовать это для пользовательских команд в моей игре.

ответ

2

Во-первых, вы можете разделить текст по первому слову | nofirstword с помощью цикла for /f, используя "tokens=1*". Подробные сведения см. В разделе help for в окне консоли.

Далее вы можете использовать попытку call :label, где :label - это то, что было первым словом. В сущности, вы создаете batch functions и позволяете пользователю выбрать, какая функция выполнена. Если метка функции не существует, то уровень ошибок будет отличным от нуля, и вы можете обрабатывать соответствующим образом, используя conditional execution. Это упрощает расширение вашего скрипта без необходимости добавлять оператор if /i для каждого выбранного вами или синонима, который вы добавляете. (Это может быть хорошей идеей, чтобы скрыть сообщение об ошибке за попытку call несуществующей этикетки, перенаправив 2>NUL.) Вот полный пример:

@echo off & setlocal 

:entry 
set /P "command=Command? " 

for /f "tokens=1*" %%I in ("%command%") do (
    2>NUL call :%%I %%J || (
     if errorlevel 1000 (exit /b 0) else call :unsupported %%I 
    ) 
    goto :entry 
) 

:display 
:echo 
:say 
:show 
echo(%* 
exit /b 0 

:ping 
ping %~1 
exit /b 0 

:exit 
:quit 
:bye 
:die 
echo OK, toodles. 
exit /b 1000 

:unsupported <command> 
1>&2 echo %~1: unrecognized command 
exit /b 0 
+0

Спасибо! Это работает для меня :) –