Проверка ввода командного файла - убедитесь, что пользователь ввел целое число - PullRequest
12 голосов
/ 26 марта 2009

Я экспериментирую с командным файлом Windows, чтобы выполнить простую операцию, которая требует от пользователя ввода неотрицательного целого числа. Я использую простые методы пакетного файла для получения пользовательского ввода:

@ECHO OFF
SET /P UserInput=Please Enter a Number: 

Пользователь может ввести любой текст, который он хочет, поэтому я хотел бы добавить некоторую подпрограмму, чтобы убедиться, что введенное пользователем действительное число. То есть ... они ввели по крайней мере один символ, и каждый символ представляет собой число от 0 до 9. Я хотел бы кое-что, что я мог бы передать UserInput. В конце подпрограммы это будет похоже на if / then, в котором будут выполняться другие операторы, основанные на том, действительно ли это было действительное число.

Я экспериментировал с циклами и подстроками и тому подобным, но мои знания и понимание все еще невелики ... поэтому любая помощь будет оценена.

Я мог бы создать исполняемый файл, и я знаю, что есть более приятные способы сделать что-либо, чем командные файлы, но по крайней мере для этой задачи я пытаюсь упростить его с помощью командного файла.

Ответы [ 14 ]

0 голосов
/ 05 мая 2014

Это более удобный для пользователя способ.

if %userinput%==0 (
cls
goto (put place here)
)
if %userinput%==1 (
cls
goto (put place here)
)
if %userinput%==2 (
cls
goto (put place here)
)
if %userinput%==3 (
cls
goto (put place here)
)
if %userinput%==4 (
cls
goto (put place here)
)
if %userinput%==5 (
cls
goto (put place here)
)if %userinput%==6 (
cls
goto (put place here)
)if %userinput%==7 (
cls
goto (put place here)
)
if %userinput%==8 (
cls
goto (put place here)
)
if %userinput%==9 (
cls
goto (put place here)
)

Это может быть использовано для любого типа пользовательского ввода.

0 голосов
/ 01 марта 2014

@ эхо выкл setlocal enableextensions enabledelayedexpansion set / p UserInput = Введите число: set / a Test = UserInput если! тест! EQU 0 ( если! UserInput! EQU 0 ( номер эха ) еще ( эхо не число ) ) еще ( номер эха )

Да, все прекрасно но ты забываешь об одной мелочи 0 также является цифрой ; (

0 голосов
/ 31 декабря 2009

вы можете заново изобрести колесо и отрастить несколько белых волосков, выполняя проверку строк в пакете, или вы можете использовать vbscript

strInput = WScript.Arguments.Item(0)
If IsNumeric(strInput) Then
    WScript.Echo "1"
Else
    WScript.Echo "0"
End If

сохранить как checkdigit.vbs и в вашем пакете

@echo off
for /F %%A in ('cscript //nologo checkdigit.vbs 100') do (
        echo %%A
        rem use if to check whether its 1 or 0 and carry on from here
)
0 голосов
/ 31 декабря 2009
:ASK
SET /P number= Choose a number [1 or 2]: 
IF %number% EQU 1 GOTO ONE
IF %number% NEQ 1 (
  IF %number% EQU 2 GOTO TWO
  IF %number% NEQ 2 (
    CLS
    ECHO You need to choose a NUMBER: 1 OR 2.
    ECHO.
    GOTO ASK
  )
)

Это прекрасно работает для меня. Если он выберет число меньше или больше, строки, плавающее число и т. Д., Он получит сообщение («Вам нужно выбрать НОМЕР: 1 ИЛИ 2.»), и запрос INPUT будет повторен.

...