Как получить пользовательский ввод при запуске пакетного файла и как разделить ввод на разные переменные - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь узнать, как создавать пакетные файлы, и решил создать простой калькулятор, и я хочу, чтобы он принимал пользовательский ввод при запуске, но я не знаю, как заставить его работать. Я имею в виду, что я пишу: calc 25 * 78, и он выводит мне результат, не спрашивая аргументы снова.

То, как я его кодировал, мне нужно разделить аргументы, иначе говоря: у каждого числа и оператора есть своя собственная переменная, и единственный способ, которым я смог сделать это, - это если числа имеют заданную длину.

Вот мой код на случай, если он может помочь:

@echo off

set /p Action= podaj dzialanie 

set number1= %action:~2,1%
set number2= %action:~4,1%

set operation= %action:~0,1%

set /a result= number1 %operation% number2 
echo %number% %operation% %number2%=%result%

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Это просто, когда вы полагаетесь на правильные параметры:

@echo off
set /a "result=%*"
echo Result is %result%

Работает с пробелами или без них:

test.bat 5 + 3
test.bat 3*4

Немного больше кода, если вы хотите спросить пользователя, когда есть нет параметров:

@echo off
if "%*"=="" goto :AskUser
set /a "result=%*" || goto :AskUser
echo Result is %result%
goto :eof

:AskUser
REM no or invalid parameter(s)
echo some explanation of what input is expected.
set /p "Action= podaj dzialanie : "
set /a "result=%action%" || goto :AskUser
echo Result is %result%

%* - это "все параметры". (%1 является первым параметром, %2 вторым и т. Д. c. До %9, если вы хотите проверить каждый параметр, но тогда вы потеряете преимущество, если пропустите пробелы)

0 голосов
/ 07 апреля 2020

Я не уверен, что понимаю, как вы собираетесь использовать сценарий, так что это одна из идей:

@Echo Off

:PoprosDzialanie
For %%G In (Action Integer1 Operator Integer2 Result)Do Set "%%G="
Set /P "Action=podaj dzialanie "
If Not Defined Action GoTo PoprosDzialanie
Call :AnalizujArgumenty %Action%
If ErrorLevel 1 GoTo PoprosDzialanie
Set /A result=Integer1 %Operator% Integer2 
If Defined Result (Echo %Integer1% %Operator% %Integer2% = %Result%
    "%__AppDir__%timeout.exe" 3 /NoBreak>NUL)
Rem Your script continues between this line and the next none empty line.

GoTo :EOF

:AnalizujArgumenty
If Not "%4"=="" Exit /B 1
If "%3"=="" Exit /B 1
2>NUL Set /A Integer2=%3
If ErrorLevel 1 Exit /B 1
If Not "%2"=="*" If Not "%2"=="/" If Not "%2"=="+" If Not "%2"=="-" Exit /B 1
Set "Operator=%2"
2>NUL Set /A Integer1=%1
If ErrorLevel 1 Exit /B 1
Exit /B

Входные данные отправляются в :AnalizujArgumenty, где каждый аргумент анализируется в убедитесь, что переданы только три аргумента, и что эти аргументы были действительными, то есть целочисленный оператор integer, (где оператором может быть только *, /, + или -) . Если в ходе этого проходного анализа переменные определены, и ваш расчет выполнен, в противном случае они не определены, а запрос действия повторяется.

Если у вас есть другие действия для выполнения в вашем сценарии, их можно добавить, где Rem arked, (вы можете при желании удалить Rem ark) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...