当前位置:  开发笔记 > 开发工具 > 正文

批处理文件输入验证 - 确保用户输入了整数

如何解决《批处理文件输入验证-确保用户输入了整数》经验,为你挑选了3个好方法。

我正在尝试使用Windows批处理文件来执行一个简单的操作,该操作要求用户输入一个非负整数.我正在使用简单的批处理文件技术来获取用户输入:

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

用户可以在此处输入他们想要的任何文本,因此我想添加一些例程以确保用户输入的是有效数字.那就是......他们输入了至少一个字符,每个字符都是0到9之间的数字.我想要一些可以将UserInput输入的字符.例程结束时就像if/then那样根据它是否实际上是一个有效的数字来运行不同的语句.

我已经尝试过循环和子串等等,但我的知识和理解仍然很渺茫......所以任何帮助都会受到赞赏.

我可以构建一个可执行文件,我知道有更好的方法来处理批处理文件,但至少对于这个任务,我试图通过使用批处理文件来保持简单.



1> Joey..:

您可能不会在DOS批处理文件中执行此操作.或者至少,set /pDOS中对我的支持是闻所未闻的:-)

你可以使用子串.事实上,我已经为特定的常规语言编写过一次解析器,但这很麻烦.最简单的方法可能是将内容分配%userinput%给另一个变量,使用set /a.如果结果出来,0你需要检查输入本身是否是0,否则你可以得出结论它是一个非数字:

@echo off
setlocal enableextensions enabledelayedexpansion
set /p UserInput=Enter a number: 
set /a Test=UserInput
if !Test! EQU 0 (
  if !UserInput! EQU 0 (
    echo Number
  ) else (
    echo Not a number
  )
) else (
  echo Number
)

但是,这仅适用于范围内的数字Int32.如果您只关心任何数字(也可能是浮点数),那么您需要采用基于循环的方法来解剖它.

注意:已更新以解决空间问题.然而,潜伏着仍然存在一个问题:输入123/5收益率"数字",因为set /a可以评估这个......



2> Wouter van N..:

这与Johannes的想法相同.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或编译器; 记事本会做的.在每个窗口框上运行,就像批处理文件一样.那么为什么不利用呢?

你甚至可以混合批量文件和JavaScript.例:

sleep.js的内容:

var SleepSecs=WScript.Arguments.Item(0);
WScript.Sleep(SleepSecs*1000)

sleep.cmd的内容:

cscript /nologo sleep.js %1

您现在可以从批处理文件中调用它以使脚本休眠10秒钟.只有普通的批处理文件很难做到这一点.

sleep 10



3> Ben Brandt..:

谢谢大家.我试图让自己更难以查看循环和字符串操作.我使用了你的数学评估和比较技巧.以下是我最终提出的概念脚本:

:Top
@ECHO OFF
ECHO.
ECHO ---------------------------------------
SET /P UserInput=Please Enter a Number: 
ECHO.
ECHO UserInput = %UserInput%
ECHO.
SET /A Evaluated=UserInput
ECHO Math-Evaluated UserInput = %Evaluated%
if %Evaluated% EQU %UserInput% (
    ECHO Integer
    IF %UserInput% GTR 0 ( ECHO Positive )
    IF %UserInput% LSS 0 ( ECHO Negative )
    IF %UserInput% EQU 0 ( ECHO Zero )
    REM - Other Comparison operators for numbers
    REM - LEQ - Less Than or Equal To
    REM - GEQ - Greater Than or Equal To
    REM - NEQ - Not Equal To
) ELSE (
    REM - Non-numbers and decimal numbers get kicked out here
    ECHO Non-Integer
)

GOTO Top

此方法捕获所有数字,并可以检测它是正数,负数还是零.任何小数或字符串都将被检测为非整数.我发现的唯一边缘情况是带空格的字符串.例如,文本"Number 1"将导致脚本在用户输入被评估为math时崩溃/关闭.但在我的情况下,这很好.我不希望我的脚本继续无效输入.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有