Во-первых, вы можете разделить текст по первому слову | 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
Спасибо! Это работает для меня :) –