|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - 2 числовых параметра, первый вводит пользователь, второй задается в скрипте |
|
|
CMD/BAT - 2 числовых параметра, первый вводит пользователь, второй задается в скрипте
|
Новый участник Сообщения: 8 |
Не смог понять суть задания (заранее спасибо)
Написать файл, в котором задается 2 числовых параметра, первый параметр вводится пользователем с клавиатуры, второй задается в скрипте, и проверяется их существование. Если первая переменная существует, она выводится на экран, иначе выводится сообщение об ошибке. Если вторая переменная существует, она прибавляется к первой и выводится на экран, иначе выводится сообщение об ошибке. |
|
Отправлено: 00:58, 18-01-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Неудивительно, что Вы не поняли. Поскольку под «параметром» обычно подразумевают совсем другое.
Попробуйте так: Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set /a iFirstVar = 12345 set iSecondVar= set /p "iSecondVar=Enter digital value: " if defined iFirstVar ( echo Environment variable [iFirstVar] = [%iFirstVar%]. if defined iSecondVar ( echo Environment variable [iSecondVar] = [%iSecondVar%]. set /a iSumm = %iFirstVar% + %iSecondVar% echo Summ of environment variables [iFirstVar] and [iSecondVar] = [!iSumm!]. ) else ( echo Environment variable [iSecondVar] not defined. exit /b 2 ) ) else ( echo Environment variable [iFirstVar] not defined. exit /b 1 ) endlocal exit /b 0 ![]() |
Отправлено: 07:11, 18-01-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать хороший вариант, единственное столкнулся с проблемой, по задаче должно быть именно число, а в этом варианте проходят и буквы, пробовал вот такой вариант для проверки символов, но проходит только для вводимого числа не могу связать со вторым числом, сумму считает, но при не верных данных, не останавливается на ошибке вводимого числа, а на втором числе высчитывает 0
Скрытый текст
@echo off
:st set /p "v=Введите число: " for /f "delims=" %%A in ('echo.%v%^| findstr "[^0-9]"') do set "nv=%%~A" if not "%v%"=="%nv%" (echo.Это число %v%) else (goto st) pause>nul |
Отправлено: 00:13, 19-01-2019 | #3 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать самое приличное, что смог составить, проблема в том, что работает только в идеальных условиях, когда все значения числа, при вводе буквы, всё равно показывает значение суммы
Скрытый текст
@echo off
set /a "n=2" set /p "v=vvedide chisl: " set /a "summ=%v%+%n%" for /f "delims=" %%A in ('echo.%v%^| findstr "[^0-9]"') do set "nv=%%~A" for /f "delims=" %%A in ('echo.%n%^| findstr "[^0-9]"') do set "nt=%%~A" if not "%v%"=="%nv%" (echo.chislo1 %v%) else (echo.bag | pause>exit) if "%n%"=="%nt%" (echo. summa %summ%) else (echo.bag) pause exit |
Отправлено: 01:44, 19-01-2019 | #4 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата crouly0:
@echo off set /a a=2 :begin cls set /p "b=Введите число: " if "%b%"=="&" (echo Это не число&pause&goto begin) if "%b%"=="" (echo Это не число&pause&goto begin) if "%b%"=="<" (echo Это не число&pause&goto begin) if "%b%"==">" (echo Это не число&pause&goto begin) echo.%b%|>nul findstr /rc:"[^0-9]"&&(echo это не число&pause&goto begin) set /a sum=a+b echo sum=%sum% pause&exit /b |
||
------- Отправлено: 10:08, 19-01-2019 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Хоть это и глупо — проверять значение, заданное непосредственно в самом пакетном файле (я лично не вижу в этом ни малейшего смысла — в отличие от проверки интерактивно вводимых данных), но — пожалуйста:
Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion >nul 2>&1 set /a iFirstVar = 12345 || ( echo Need only digital value content for [iFirstVar] environment variable. exit /b 1 ) set iSecondVar= set /p "iSecondVar=Enter digital value: " if defined iFirstVar ( echo Environment variable [iFirstVar] = [%iFirstVar%]. if defined iSecondVar ( echo Environment variable [iSecondVar] = [%iSecondVar%]. echo %iSecondVar%| >nul 2>&1 findstr.exe /r /c:"^[0-9]*$" && ( set /a iSumm = %iFirstVar% + %iSecondVar% echo Summ of environment variables [iFirstVar] and [iSecondVar] = [!iSumm!]. ) || ( echo Need only digital value content for [iSecondVar] environment variable. exit /b 4 ) ) else ( echo Environment variable [iSecondVar] not defined. exit /b 3 ) ) else ( echo Environment variable [iFirstVar] not defined. exit /b 2 ) endlocal exit /b 0 Можете попробовать задать для переменной окружения iFirstVar вместо «12345» нечисловое значение, можете попробовать ввести для переменной окружения iSecondVar нечисловое значение и посмотреть, что будет. |
Отправлено: 10:58, 19-01-2019 | #6 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать при вводи первого значения, числовым, второе значение из программы (буква), присваивает значение вводимой переменной 0, и считает сумму, хотя должна быть ошибка, также при буквенном значении вводимой переменной, по условию, второе значение отображаться не должно, но ошибку выдает верно
|
Отправлено: 11:42, 19-01-2019 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Что есть «первое значение», что есть «второе значение из программы (буква)»? Вы не могли бы выражаться в общепринятых терминах — «переменная окружения», «пакетный файл», «iFirstVar», «iSecondVar»?!
Вот примеры исполнения пакетного файла с кодом из предыдущего сообщения, со вводом числового значения для переменной окружения iSecondVar и со вводом не числового значения для переменной окружения iSecondVar: Скрытый текст
![]() Вот пример исполнения пакетного файла с кодом из предыдущего сообщения, в котором добавлена одна буква «a» — таким образом делается тупая попытка присвоения переменной окружения iFirstVar не числового значения непосредственно в коде пакетного файла (что, естественно, сразу вызывает ошибку, которую мы отслеживаем и выводим соответствующее сообщение): Скрытый текст
![]() |
Отправлено: 12:05, 19-01-2019 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать crouly0, Мой вариант, частично списанный у Iska. Контроль корректности вводимых данных имеется.
@Echo Off cls 2>nul Set /A iSecondVar=12345 :Begin Set "in=" set /p "in=Enter digital value: " cls If Not defined in ( Echo First number not defined Pause Exit /B 1 ) Set /A iFirstVar=in 2>nul If Not "%in%"=="%iFirstVar%" ( Echo First number invalid entered "%in%" GoTo :Begin ) Echo First number= %iFirstVar% If Not defined iSecondVar ( Echo Second number not defined Pause Exit /B 2 ) Echo Second number= %iSecondVar% Echo. Set /A Summ=%iFirstVar%+%iSecondVar% echo Summ=iFirstVar+iSecondVar=%iFirstVar%+%iSecondVar%=%Summ% Echo. Pause |
------- Последний раз редактировалось megaloman, 19-01-2019 в 13:10. Отправлено: 12:59, 19-01-2019 | #9 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать я говорю о проверки iFirstVar
|
Отправлено: 13:01, 19-01-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Загрузка - Не появился второй пользователь | gorill | Microsoft Windows 10 | 12 | 02-03-2018 22:12 | |
Прочее - Пинг первый проход 5мск второй 1мск | Sergey_7 | Сетевые технологии | 4 | 13-09-2017 16:25 | |
2007 - Автоматический скрипт копирования числовых данных без формулы | DmitriyZzZ | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 25-12-2015 17:55 | |
Разное - Не задается печать windows 7 принтер HP b109a | Combattsar | Microsoft Windows 7 | 13 | 02-02-2013 19:06 | |
HDD - Установлены 2 жестких диска. Первый SATA, второй IDE | tyrin | Накопители (SSD, HDD, USB Flash) | 7 | 21-11-2009 19:23 |
|