Ввод значений в ряд без подтверждения Enter-ом в bat-нике
Собственно проблема в следующем:
Нужна программка, в которую вводится числа (в данном случае IP адрес) с проверкой на правельность. Но в моем коде она проверяет только после нажатия клавиши Enter + пишется в столбик(((
Как можно сделать, что бы числа писались в строчку и без нажатия на Enter?
P.S. нажатие на Enter можно эмулировать, но тут я еще не разобрался
Вот к примеру текстовый пример работы: (к примеру нужно ввести IP 174.34.9.234 )
B одну ячейку должно вводится 3 числа, оно проверило на корректность и поставило точку и после перескочило на следующую ячейку. если чисел 2 или 1 то переход на следующую ячейку происходит после нажатия на пробел....
Юзер вводит:
1 7 4 (сразу же проверка на корректность) . (и автоматически стала точка) 3 4 (тут числа 2 и юзер жмет пробел и происходит проверка и точка) . 9 (тут число одно и юзер снова жмет пробел и происходит проверка и точка) . 2 3 4 (проверка и ждем подтверждения клавишей Enter)
И мой примитивный код:
Код:
@echo off
:one
set /p one_ip=
if /I %one_ip% LEQ 223 ( goto :two
) else (
echo NO
goto :one)
:two
set /p two_ip=
if /I %two_ip% LEQ 255 ( goto :three
) else (
echo NO
goto :two)
:three
set /p three_ip=
if /I %three_ip% LEQ 255 ( goto four
) else (
echo NO
goto :three)
:four
set /p four_ip=
if /I %four_ip% LEQ 255 ( goto end
) else (
echo NO
goto :four)
:end
echo IP: %one_ip%.%two_ip%.%three_ip%.%four_ip%
pause
:one
set /p one_ip=
if /I %one_ip% LEQ 223 ( goto :two
) else (
echo NO
goto :one)
:two
set /p two_ip=
if /I %two_ip% LEQ 255 ( goto :three
) else (
echo NO
goto :two)
:three
set /p three_ip=
if /I %three_ip% LEQ 255 ( goto four
) else (
echo NO
goto :three)
:four
set /p four_ip=
if /I %four_ip% LEQ 255 ( goto end
) else (
echo NO
goto :four)
:end
echo IP: %one_ip%.%two_ip%.%three_ip%.%four_ip%
pause
Либо юзать powershall, либо передавать как аргумент другой утилите и смотреть код завершения программы.
Думаю, можно посмотреть в сторону вызова функции из библиотеки, кажется, rundlll32 этим занималась, если не ошибаюсь, и вызывать из неё getch у стандартной с++ библиотеки.
Прочитай в доке по батникам (F1 в любой Винде), как for разбивает строки по разделителям. На первый взгляд нетривиально, но работает. Приходилось как-то разбирать строку пользователь/пароль@база.
Цитата: Freeman
Прочитай в доке по батникам (F1 в любой Винде), как for разбивает строки по разделителям. На первый взгляд нетривиально, но работает. Приходилось как-то разбирать строку пользователь/пароль@база.
Какой разделитель у строки "123"?
Так ему же ж в одну строку надо с разделителем-точкой.Без точки,вводом каждого сегмента адреса по очереди,он уже сделал
Цитата: @pixo $oft
Так ему же ж в одну строку надо с разделителем-точкой.Без точки,вводом каждого сегмента адреса по очереди,он уже сделал
Не вчитался. Тогда всё хорошо.
Цитата: Alm3n
Какой-то изврат.
Либо юзать powershall, либо передавать как аргумент другой утилите и смотреть код завершения программы.
Думаю, можно посмотреть в сторону вызова функции из библиотеки, кажется, rundlll32 этим занималась, если не ошибаюсь, и вызывать из неё getch у стандартной с++ библиотеки.
Либо юзать powershall, либо передавать как аргумент другой утилите и смотреть код завершения программы.
Думаю, можно посмотреть в сторону вызова функции из библиотеки, кажется, rundlll32 этим занималась, если не ошибаюсь, и вызывать из неё getch у стандартной с++ библиотеки.
Если юзать Powershell - то в какую сторону нужно двигаться? мож есть для этого есть какое то готовое решение?
Цитата: vahminator
[quote=Alm3n;49587]Какой-то изврат.
Либо юзать powershall, либо передавать как аргумент другой утилите и смотреть код завершения программы.
Думаю, можно посмотреть в сторону вызова функции из библиотеки, кажется, rundlll32 этим занималась, если не ошибаюсь, и вызывать из неё getch у стандартной с++ библиотеки.
Либо юзать powershall, либо передавать как аргумент другой утилите и смотреть код завершения программы.
Думаю, можно посмотреть в сторону вызова функции из библиотеки, кажется, rundlll32 этим занималась, если не ошибаюсь, и вызывать из неё getch у стандартной с++ библиотеки.
Если юзать Powershell - то в какую сторону нужно двигаться? мож есть для этого есть какое то готовое решение?[/quote]
Думаю, в сторону ReadKey.