标题: findstr判断数字
[打印本页]
作者: wangbing111
时间: 2008-7-26 16:19
标题: findstr判断数字
@echo off
set /p var=请输入:
echo %var%|findstr "^[0-9]*$">nul||echo illegal number
pause
为什么不起作用?
作者: obsolete
时间: 2008-7-26 18:47
这段代码工作得挺好嘛?哪里有问题了?
PS:
1. 确保之前没有设置过环境变量var,否则用户只输入回车时,var保留以前的值
2. %var%引用变量可能无法处理用户的“非法输入”,比如包含"的情况。试试使用延迟环境变量或
call,echo %%var%%|findstr "^[0-9]*$">nul||echo illegal number
[
Last edited by obsolete on 2008-7-26 at 06:58 PM ]
作者: obsolete
时间: 2008-7-26 19:25
@echo off
setlocal enabledelayedexpansion
:loop
set var=
set /p var=请输入:
for %%i in ("^" ">" "<" "|" "&" "%%") do set var=!var:%%~i=^^%%~i!
echo !var!|findstr "^[0-9]*$">nul||echo illegal number
goto :loop
pause
作者: obsolete
时间: 2008-7-26 19:48
@echo off
setlocal enabledelayedexpansion
:loop
set var=
set num=0
set /p var=请输入:
set /a num=!var! 2>nul
if !num!==0 (
if not "!var!"=="0" echo illegal number
)
goto :loop
pause
作者: obsolete
时间: 2008-7-26 21:15
思路差不多
@echo off
setlocal enabledelayedexpansion
:loop
set var=a
set /p var=请输入:
for /l %%i in (0,1,9) do if defined var set var=!var:%%i=!
if not "!var!"=="" echo illegal number
goto :loop
pause
[
Last edited by obsolete on 2008-7-26 at 09:16 PM ]
作者: obsolete
时间: 2008-7-26 21:40
纠正一下,四楼的方法不可用,当输入包含一元算术运算符时结果不正确
比如!#
如果用于判断21亿左右内的非负整数,且除了0本身外不以0打头,改一下还能用
@echo off
setlocal enabledelayedexpansion
:loop
set var=
set num=0
set /p var=请输入:
set /a num=!var! 2>nul
if not "!var!"=="!num!" echo illegal number
goto :loop
pause
[
Last edited by obsolete on 2008-7-26 at 09:45 PM ]