2013-03-24 2 views
-2

, поэтому я задал вопрос ранее, что я хотел иметь возможность печатать в скобках в пакетном файле, что ответ на мой q не был возможен. поэтому мне нужно больше отзывов, чем просто. но то, что я хочу сделать здесь сейчас, - это когда я набираю ip-адрес вместо ввода «127.0.0.1», а затем нажимаю [Eneter] id, а просто продолжает в пакетном файле, когда я печатаю «127.0.0.1»Использование командного файла без необходимости вводить ввод на каждом входе

Кто-нибудь знает хороший способ сделать это?

+3

... а что, если пользователь пытался ввести 127.0.0.10? –

+1

IMO вам нужно написать свой собственный парсер ввода (в C/Pascal/Basic ... что угодно), чтобы это понять. – Endoro

ответ

1

Вы должны предоставить пакет, чтобы определить , что - это IP-адрес, который вы пытаетесь ввести. Должен быть отдельный символ, обозначающий конец ввода, иначе cmd просто не может knwo, где вход будет завершен. Как справедливо отметили в комментарии j__m, если вы пытаетесь ввести 127.0.0.10, вы бы не решили, что вы ввели 127.0.0.1, прежде чем вам удастся ввести 0 правильно? В общем, всегда спрашивайте себя, есть ли способ, которым я мог бы это сделать, прежде чем спросить, есть ли способ заставить компьютер что-то сделать. Если вы не можете определить, где вход заканчивается, если в конце нет ввода. Я сомневаюсь, что компьютер будет работать лучше. Компьютер - это просто машина, и он делает то, что вы ему рассказываете.

2

На этом сайте: http://www.dostips.com/forum/viewtopic.php?f=3&t=3428Описание: Вспомогательная программа GetKey.exe. Эта программа считывает ключ и сразу возвращает код Ascii через ERRORLEVEL, поэтому он не требует Введите ключ для продолжения. На этом же сайте показана программа примера ReadLine.bat; он эмулирует SET /P команды с помощью Show.exe (другая вспомогательной программы), то есть, BackSpace ключа удаления последнего набранного символа и Введите ключ завершить ввод. Вы можете изменить: подпрограмму ReadLine для удовлетворения конкретных потребностей, и показано несколько примеров этой функции.

Например, ниже подпрограмма является модифицированной версией: ReadLine, что только для чтения десятичных цифр и точек, и продолжает «автоматически» после чтения 9 символов (например, «127.0.0.1»):

:Read9DigitsAndPoints var=["prompt"] 
set Point=46 
set Slash=47 
rem set Digit_0=48 
set Digit_9=57 
set %1= 
set len=0 
if "%~2" neq "" Show %~2 
:nextKey 
    GetKey 
    set key=%errorlevel% 
    if %key% geq %Space% (
     rem Ascii character: ignore characters that are not digits nor points 
     if %key% lss %Point% goto nextKey 
     if %key% gtr %Digit_9% goto nextKey 
     if %key% equ %Slash% goto nextKey 
     Show %key% 
     for /F "delims=" %%a in ('Show %key%') do set "%1=!%1!%%a" 
     set /A len+=1 
    ) else if %key% equ %BackSpace% (
     if defined %1 (
     Show %BackSpace% %Space% %BackSpace% 
     set "%1=!%1:~0,-1!" 
     set /A len-=1 
    ) else (
     Show %Bell% 
    ) 
    ) 
if %len% neq 9 goto nextKey 
echo/ 
exit /B 

Вы можете дополнительно изменить эту подпрограмму, чтобы прочитать хорошо отформатированный IP-адрес (т. Е. Четыре группы цифр, разделенные на 3 балла), поэтому процедура продолжается после того, как пользователь вводит IP-адрес по своему усмотрению. К тому времени, do вы знаете, в какой момент вы хотите, чтобы рутина продолжалась? После прочтения первой цифры после третьего пункта?

Антонио

Смежные вопросы