找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22643|回复: 7

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

[复制链接]
发表于 2009-7-1 11:32:58 | 显示全部楼层 |阅读模式
问题:一个未知长度的字符串,其内容也未知,可以是字母,数字,标点组成。
         例如: 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 编辑 ]

评分

参与人数 1PB +2 收起 理由
keen + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-7-1 11:56:35 | 显示全部楼层
  1. echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
复制代码
发表于 2009-7-1 12:48:57 | 显示全部楼层
  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
复制代码
发表于 2009-7-1 13:12:36 | 显示全部楼层
  1. @echo off
  2. set/p n=输入一个数字:
  3. for /f "delims=1234567890" %%a in ("%n%@") do if %%a==@ (echo 纯数字) else echo 不是纯数字
  4. pause
复制代码

评分

参与人数 1PB +6 收起 理由
Batcher + 6 乐于助人

查看全部评分

 楼主| 发表于 2009-7-1 14:05:49 | 显示全部楼层
2楼同志:echo "%e%"|findstr "^.[0-9][0-9]*.$">nul&&echo 纯数字||echo 不是纯数字
这个方法我用过 效率极低,300条记录就已经慢成不可忍受
发表于 2009-7-1 17:20:11 | 显示全部楼层

回复 5楼 的帖子

findstr不是内部命令,所以慢
发表于 2009-7-1 21:42:43 | 显示全部楼层
原帖由 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 不是纯数字
发表于 2009-7-1 22:10:53 | 显示全部楼层
原帖由 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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:17 , Processed in 0.022812 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表