|
wangbing111
初级用户
 
积分 41
发帖 16
注册 2008-6-21
状态 离线
|
『楼 主』:
findstr判断数字
@echo off
set /p var=请输入:
echo %var%|findstr "^[0-9]*$">nul||echo illegal number
pause
为什么不起作用?
|
|
2008-7-26 16:19 |
|
|
obsolete
初级用户
 
积分 192
发帖 72
注册 2005-7-31
状态 离线
|
『第
2 楼』:
这段代码工作得挺好嘛?哪里有问题了?
PS:
1. 确保之前没有设置过环境变量var,否则用户只输入回车时,var保留以前的值
2. %var%引用变量可能无法处理用户的“非法输入”,比如包含"的情况。试试使用延迟环境变量或
call,echo %%var%%|findstr "^*$">nul||echo illegal number
Last edited by obsolete on 2008-7-26 at 06:58 PM ]
|
|
2008-7-26 18:47 |
|
|
obsolete
初级用户
 
积分 192
发帖 72
注册 2005-7-31
状态 离线
|
『第
3 楼』:
@echo off
setlocal enabledelayedexpansion
:loop
set var=
set /p var=请输入:
for %%i in ("^" ">" "<" "|" "&" "%%") do set var=!var:%%~i=^^%%~i!
echo !var!|findstr "^*$">nul||echo illegal number
goto :loop
pause
|
|
2008-7-26 19:25 |
|
|
obsolete
初级用户
 
积分 192
发帖 72
注册 2005-7-31
状态 离线
|
『第
4 楼』:
@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
|
|
2008-7-26 19:48 |
|
|
obsolete
初级用户
 
积分 192
发帖 72
注册 2005-7-31
状态 离线
|
『第
5 楼』:
思路差不多
@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 ]
|
|
2008-7-26 21:15 |
|
|
obsolete
初级用户
 
积分 192
发帖 72
注册 2005-7-31
状态 离线
|
『第
6 楼』:
纠正一下,四楼的方法不可用,当输入包含一元算术运算符时结果不正确
比如!#
如果用于判断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 ]
|
|
2008-7-26 21:40 |
|