Это та же идея, что и у Йоханнеса ..
SET / A устанавливает числовое значение. Если ввод не является числом, он меняет его на 0.
Это то, что вы можете использовать здесь для проверки.
@ECHO OFF
SET /P UserInput=Please Enter a Number:
IF %UserInput% EQU 0 GOTO E_INVALIDINPUT
SET /A UserInputVal="%UserInput%"*1
IF %UserInputVal% GTR 0 ECHO UserInput "%UserInputVal%" is a number
IF %UserInputVal% EQU 0 ECHO UserInput "%UserInputVal%" is not a number
GOTO EOF
:E_INVALIDINPUT
ECHO Invalid user input
:EOF
В качестве альтернативы, вы всегда можете создать небольшой файл javascript и вызвать его из своего пакетного файла. С parseInt () вы можете сделать так, чтобы вход был целочисленным, или вы можете свернуть свою собственную функцию для проверки ввода.
Написание javascript так же быстро, как и пакетного файла, но гораздо более мощный. Не требуется IDE или компилятор; Блокнот подойдет. Работает на каждом окне Windows, так же, как ваши пакетные файлы. Так почему бы не использовать это?
Вы даже можете смешивать пакетные файлы и JavaScript. Пример:
содержимое sleep.js:
var SleepSecs=WScript.Arguments.Item(0);
WScript.Sleep(SleepSecs*1000)
содержимое sleep.cmd:
cscript /nologo sleep.js %1
Теперь вы можете вызывать это из пакетного файла, чтобы ваш скрипт спал в течение 10 секунд. Нечто подобное трудно сделать с простым пакетным файлом.
sleep 10