Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何检查输入是否为整数?_Windows_Batch File_Cmd - Fatal编程技术网

Windows 如何检查输入是否为整数?

Windows 如何检查输入是否为整数?,windows,batch-file,cmd,Windows,Batch File,Cmd,简单地说,我需要检查变量是否是数字。我意识到以下能力: set /a variable1=%variable% 将非数字字符串设置为0,但我需要能够将0作为整数以及负数 这将经常运行,因此最好使用快速脚本。我尝试将变量回送到.txt中,如果检测到0-9以外的任何内容,则使用for循环进行扫描并返回错误,但脚本运行时间过长,坦率地说是一团糟。 你可以采取一些措施来消除这种影响。删除所有数字。如果有剩余,则它不是整数。并不是说这是完美的,但这是朝着正确方向迈出的一步 set "tempvar=

简单地说,我需要检查变量是否是数字。我意识到以下能力:

set /a variable1=%variable%
将非数字字符串设置为0,但我需要能够将0作为整数以及负数

这将经常运行,因此最好使用快速脚本。我尝试将变量回送到.txt中,如果检测到0-9以外的任何内容,则使用for循环进行扫描并返回错误,但脚本运行时间过长,坦率地说是一团糟。

你可以采取一些措施来消除这种影响。删除所有数字。如果有剩余,则它不是整数。并不是说这是完美的,但这是朝着正确方向迈出的一步

set "tempvar="
FOR /F "tokens=* delims=-0123456789" %%G IN ("%variable1%") DO SET "tempvar=%%G"

IF DEFINED tempvar echo NOT AN INTEGER
试试这个。一些特殊的符号,比如
^
可能会导致问题。 您还可以使用findstr:

@echo off 

:isIntererFindstr  input [returnVar] 
setlocal enableDelayedexpansion 
set "input=%~1" 

if "!input:~0,1!" equ "-" (
    set "input=!input:~1!"
) else (
    if "!input:~0,1!" equ "+" set "input=!input:~1!"
)

echo !input!|findstr /r "[^0-9]" >nul 2>&1

if %errorlevel% equ 0 ( 
        set result=false 
) else ( 
        set result=true 
)
endlocal & if "%~2" neq "" (set %~2=%result%) else echo %result% 
如前所述

最容易使用的数字应为:

IF %1 NEQ +%1 echo Notnumeric!
如果也要考虑负数(连字符),这将起作用

SET number=%1
if %1 EQU +%1 echo positive number
if %1==-%number:-=% echo negative number

中了解到,您是否可以编辑问题以包含用于检查用户是否提供整数的代码?您可能已经接近了。请转到谷歌并键入:批处理文件是数字的-或者在本页右上角的搜索栏中执行此操作…您是否尝试过类似的操作,或者也尝试过其中提到的操作?我非常确定“set/a v=%v%”也可以处理负值。所以几乎任何数字都会返回除零之外的其他值。那么,为什么不先测试零,然后将其嵌套在if语句中呢?所以逻辑是这样的。。。(如果为零,则为数字,否则(如果设置/a v=%v%-->零,则为非数字,否则为数字))到一个几乎相同的问题可以解决您的问题。我的意思是,这是2年前的问题,但这是一个很好的解决方案。
SET number=%1
if %1 EQU +%1 echo positive number
if %1==-%number:-=% echo negative number