[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理如何判断一个字符串是纯数字类型

问题:一个未知长度的字符串,其内容也未知,可以是字母,数字,标点组成。
         例如: set a=aaa1,23
                   set b=bbb123b
                   set c=123c
                   set d=123ddd。1230abbb456
                   set e=1230
如何判断它是纯数字组成的,比如e就是纯数字。
我尝试过如下方法
                       set /a x=%x% + 1 && set flg=n
试图通过数值运算是否成功来做标志,可惜行不通, 不是纯数字的也可以运算。我对/a数字计算的理解不深,求解诸位。

4楼同志的思路很牛,效率明显提高,该问题已经解决,谢谢各位

[ 本帖最后由 huaxn 于 2009-7-1 14:39 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

  1. echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :loop
  3. set /p n=输入一个数字
  4. set m=!n!#
  5. for /l %%a in (0 1 9) do set m=!m:%%a=!
  6. if "!m!" equ "#" (echo 纯数字) else (echo 不是纯数字)
  7. goto :loop
复制代码

TOP

  1. @echo off
  2. set/p n=输入一个数字:
  3. for /f "delims=1234567890" %%a in ("%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
  4. pause
复制代码
1

评分人数

TOP

2楼同志:echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
这个方法我用过 效率极低,300条记录就已经慢成不可忍受

TOP

回复 5楼 的帖子

findstr不是内部命令,所以慢

TOP

原帖由 inittab 于 2009-7-1 13:12 发表
@echo off
set/p n=输入一个数字:
for /f "delims=1234567890" %%a in ("%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
pause

上面代码如果n是空的时候也会判断为数字,照下面这样写就不会了(注意红色部分)
for /f "delims=1234567890" %%a in ("@%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字

TOP

原帖由 ejzhang 于 2009-7-1 21:42 发表

上面代码如果n是空的时候也会判断为数字,照下面这样写就不会了(注意红色部分)
for /f "delims=1234567890" %%a in ("@%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字


看了一下发现有问题。前后加@或其他字符都不好使。 象 [email=n=@123]n=@123[/email] 123@,加两个@就更不行了。象1243awfasf 都会判为纯数字,但如果什么也不加,则不会执行do 后边语句, 所以修正如下:

  1. @echo off
  2. set/p n=输入一个数字:
  3. if not "%n%"=="" (
  4. for /f "delims=1234567890" %%a in ("%n%") do echo 不是纯数字&pause&goto :eof
  5. ) else echo 为空
  6. echo 纯数字
  7. pause
复制代码

[ 本帖最后由 inittab 于 2009-7-1 22:33 编辑 ]

TOP

返回列表