Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   cпецсимвол в значении переменной for (http://forum.oszone.net/showthread.php?t=355691)

Demyurg 18-09-2024 17:04 3030904

cпецсимвол в значении переменной for
 
Добрый день. Возникла необходимость в строке, вводимой пользователем, проверять корректность ввода (требуется десятичное число).
Использую такую конструкцию в качестве первого шага:
Код:

set /p i="Ввод:  "
for /f "delims=0123456789,." %%j in ("%i%") do set tmp1="%%j"
if defined tmp1 echo incorrect input

В принципе все работает. Скрипт реагирует на некорректные символы, но ровно до тех пор, пока в i не появляется спецсимвол.
То есть, например, 456,12a распознается как неверное число, а вот 456;12 уже нет.

Вопрос: как объяснить циклу, что я хочу, чтобы в вышеуказанном примере "456;12" переменная tmp1 принимала вид ";" ?

NickM 18-09-2024 18:15 3030906

CMD/BAT - [решено] Проверка количества вводимых символов в переменную

Demyurg 18-09-2024 19:29 3030907

Ознакомился с приведенной темой. Сделал вывод, что никак. Верно?

NickM 18-09-2024 19:56 3030909

Цитата:

Цитата Demyurg
Сделал вывод, что никак. Верно? »

Не верно.

В теме указано решение для:
Цитата:

Цитата Demyurg
проверять корректность ввода »


Demyurg 18-09-2024 20:34 3030911

Однако в последнем посте в топике, на который Вы ссылаетесь, как раз написано обратное. Что при попытке "ввести непотребство" код валится. Что я собственно и наблюдаю в своём примере со спецсимволами. Или я что-то не так понял? Разъясните, пожалуйста.

NickM 18-09-2024 21:03 3030912

Цитата:

Цитата Demyurg
Что я собственно и наблюдаю в своём примере со спецсимволами. »

На каком спецсимволе у Вас:
Цитата:

Цитата Demyurg
код валится »


megaloman 19-09-2024 12:45 3030923

Demyurg,
Цитата:

Цитата Demyurg
требуется десятичное число »

Код:

@Echo Off &Cls
        :Begin
                Set "i="
                Set /p i="Ввод:  >"
                If Not defined i (Echo Empty input & GoTo :Begin)
                Echo "%i%"|>nul Findstr /R /C:"^\"[0-9]*\"$"|| (Echo incorrect input &Set "i=" &GoTo :Begin)
                Echo %i%
        GoTo :Begin
Pause
Exit /B


Demyurg 21-09-2024 17:08 3030980

megaloman, спасибо. то, что надо. добавил только [0-9.,] и для моей задачи подходит.
Однако вопрос в образовательных, так сказать, целях относительно работы со спецсимволами в for открыт. Возможно ли это в принципе? Насколько я понял из темы, на которую ссылался NickM, нет. Верно?

NickM, Некорректно выразился. Не в том смысле код валится, что закрывается скрипт по исключению, нет. А в том смысле, что продолжается его исполнение с неверными результатами. Вводные данные, которые не должны проходить проверку, ее проходят и попадают в дальнейшую обработку с закономерно неверными итогами.


Время: 10:35.

Время: 10:35.
© OSzone.net 2001-