Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - 2 числовых параметра, первый вводит пользователь, второй задается в скрипте

Ответить
Настройки темы
CMD/BAT - 2 числовых параметра, первый вводит пользователь, второй задается в скрипте

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не смог понять суть задания (заранее спасибо)
Написать файл, в котором задается 2 числовых параметра, первый параметр вводится пользователем с клавиатуры, второй задается в скрипте, и проверяется их существование. Если первая переменная существует, она выводится на экран, иначе выводится сообщение об ошибке. Если вторая переменная существует, она прибавляется к первой и выводится на экран, иначе выводится сообщение об ошибке.

Отправлено: 00:58, 18-01-2019

 

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png 22222.png
(18.6 Kb, 1 просмотров)

megaloman, та же проблема, с которой столкнулся я, не проверяется значение из программы iSecondVar, если в программе задать значение например (m), то программа выдает что значение iSecondVar, а по условию должна быть ошибка, и не должна выдавать сумму

Отправлено: 13:09, 19-01-2019 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png 22222.png
(18.6 Kb, 0 просмотров)

megaloman, iSecondVar не проходит проверку, если внутри программы, дать значение например (m), то в результате получается значение 0, по условию должна быть ошибка, без подсчета суммы, вообщем у меня такая же проблема

Отправлено: 13:13, 19-01-2019 | #12


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


1. проверка вводимого числа
если это не число, то ошибка, программа остановилась

2. Если введено число, выводим его на экран
3. проверяем число заданное в программе
если это не число, ошибка, программа останавливается
4. если число заданное в программе число, выводим его на экран
выводим сумму.

а получается, если в программе не число, то выполняется в любом случае 4 пункт, но со значение 0

Отправлено: 13:18, 19-01-2019 | #13


Аватара для YuS_2

Старожил


Сообщения: 283
Благодарности: 106

Профиль | Отправить PM | Цитировать


Выдалось время и было интересно запустить краш-тест

Цитата Iska:
но — пожалуйста: »
Здесь валится на символах: & | "

Цитата megaloman:
Мой вариант, частично списанный у Iska. »
Здесь уже лучше, но валится на: "

В свою очередь, чтобы не быть пустым критиканом, даю свою версию на краш-тест:
Код: Выделить весь код
@echo off
set /a a=2

:begin
set "b= "
cls
set /p "b=Введите число: "
set "b=%b:"=%"
if "%b%"=="" (echo это не число&pause&goto begin)
echo."%b%"|>nul findstr /rc:"[&|^%%]"&&(echo это не число&pause&goto begin)
if "%b:~,2%"=="0x" (
	echo.%b:~2%|>nul findstr /irc:"[^0-9a-f]"&&(echo это не число&pause&goto begin)
) else (
	echo.%b%|>nul findstr /rc:"[^0-9]"&&(echo это не число&pause&goto begin)
)
set /a c=b
if %c% equ 0 if not %c% equ %b% (echo некорректное число&pause&goto begin)
echo sum=%a%+%c%
set /a sum=a+c
echo sum=%sum%
pause&exit /b

-------
scio me nihil scire


Последний раз редактировалось YuS_2, 19-01-2019 в 17:07. Причина: Добавил обработку шестнадцатеричных чисел


Отправлено: 13:28, 19-01-2019 | #14


Ветеран


Contributor


Сообщения: 1503
Благодарности: 882

Профиль | Отправить PM | Цитировать


crouly0,
Цитата crouly0:
значение из программы iSecondVar, если в программе задать значение например (m), то программа выдает что значение iSecondVar, а по условию должна быть ошибка »
ИМХО, это чересчур.
Понимаю, можно ошибиться при вводе с клавиатуры, но руками в тексте скрипта - это злонамеренное вредительство. Но, хозяин - барин.
Вот вариант с одинаковым контролем обоих чисел
Код: Выделить весь код
@Echo Off
cls

Set "In2=12345"

:Begin
	Set "In1="
	Set /P "In1=Enter iFirstVar digital value: "
	Call :Control "First " "iFirstVar" "%In1%"
	If %ErrorLevel%==1 GoTo :Begin
	If %ErrorLevel%==2 Exit /B 2

Call :Control "Second" "iSecondVar" "%In2%" ||(Pause &Exit /B %ErrorLevel%)

Echo.
Set /A Summ=%iFirstVar%+%iSecondVar%
echo Summ=iFirstVar+iSecondVar=%iFirstVar%+%iSecondVar%=%Summ%
Echo.

Pause
Exit /B 0

:Control
SetLocal
	Set "In=%~3"
	If Not defined In (
		Echo %~1 number not defined. Script cancelling.
		EndLocal  &Set "%~2="
		Exit /B 2
	)
	2>nul Set /A Inn=%In%   
	If Not "%In%"=="%Inn%" (
		Echo %~1 number invalid entered %3.
		EndLocal  &Set "%~2="
		Exit /B 1
	)
	Echo %~1 number= %~3
	EndLocal &Set /A %~2=%~3
Exit /B 0
YuS_2, Не берусь в CMD организовать контроль на всевозможные спецсимволы. ИМХО, надо принять некоторые риски. ©Всегда можно подобрать данные, способные одурачить программу.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-01-2019 в 14:54.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:35, 19-01-2019 | #15


Аватара для YuS_2

Старожил


Сообщения: 283
Благодарности: 106

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Не берусь в CMD организовать контроль на всевозможные спецсимволы. »
Это да, cmd - он такой, со спецсимволами не особо хорошо дружит...
Но свести к минимуму всевозможные коллизии синтаксиса, всё же, можно...

-------
scio me nihil scire


Отправлено: 15:31, 19-01-2019 | #16


Ветеран


Contributor


Сообщения: 1503
Благодарности: 882

Профиль | Отправить PM | Цитировать


YuS_2,
Цитата:
Но свести к минимуму всевозможные коллизии синтаксиса, всё же, можно...
Цена вопроса? Извините, засоряю форум мемуарами, когда-то давно в досе наваял бухгалтерскую программу, организовал контроль, в случае ошибки выдал сообщение типа: "ТРАЛЯЛЯЛЯ, для продолжения нажми любую клавишу". Все было хорошо, но скоро получил звонок: программа виснет! Поехал в командировку и выяснил, что из всех 102 клавиш бухгалтер не думая совершенно, без злого умысла механически нажимала Pause

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 15:44, 19-01-2019 | #17


Аватара для YuS_2

Старожил


Сообщения: 283
Благодарности: 106

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Цена вопроса? »
Да, собственно, несколько строк в батнике... вот:
Цитата YuS_2:
даю свою версию на краш-тест »
в том числе, возможна обработка восьмеричных чисел... ну и шестнадцатиричные тоже можно запустить, но это уже надо немного поизвращаться, т.к. буквы в составе числа придется обрабатывать другими "регулярками"...
===
В вышеприведенный код добавлена возможность обработки шестнадцатиричных чисел

-------
scio me nihil scire


Последний раз редактировалось YuS_2, 19-01-2019 в 17:02.


Отправлено: 16:24, 19-01-2019 | #18



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - 2 числовых параметра, первый вводит пользователь, второй задается в скрипте

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Загрузка - Не появился второй пользователь 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




 
Переход