无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6605|回复: 6
打印 上一主题 下一主题

在XP命令行下如何用批处理比较数据大小?

[复制链接]
跳转到指定楼层
1#
发表于 2005-5-17 16:03:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在想WIN XP/2000的命令行下用批处理来比较数据的大小,如 “IF 3 > 2 GOTO...”,当然这样是实现不了的,能否借助什么工具实现这个目的呢?
7#
发表于 2009-6-19 17:49:59 | 只看该作者
如果要实现 if 10<%ver%<100 goto 的效果怎么办?有没有简洁有效的代码可以实现!有没有人知道,谢谢!
回复

使用道具 举报

6#
发表于 2005-5-18 11:16:27 | 只看该作者

在XP命令行下如何用批处理比较数据大小?

XP下命令行的加减运算请使用set /a,详情请查阅set /?
后一个问题,在我的环境中不成立,例子如下:
H:\work\dos>if 518 GTR 2108 echo 518 Greater than 2108
H:\work\dos>if 2108 GTR 518 echo 2108 Greater than 518
2108 Greater than 518
回复

使用道具 举报

5#
 楼主| 发表于 2005-5-17 22:15:59 | 只看该作者

在XP命令行下如何用批处理比较数据大小?

[这个贴子最后由wyboy在 2005/05/17 11:17pm 第 1 次编辑]

Climbing 兄:
你提供的方法在这样情况下却出错:
set var1=2108
set var2=518
if %var1% GTR %var2% goto ...(条件却不成立)
本来2108大于518是没错的,但这样比较却是%var1%小于%var2%,原因2108百位数1小于518的百位数5。请问怎样解决这个问题:使if %var1% GTR %var2% goto ...这个语句条件成立。即与现实一样:2108就是大于518
回复

使用道具 举报

4#
 楼主| 发表于 2005-5-17 17:55:05 | 只看该作者

在XP命令行下如何用批处理比较数据大小?

还有请问在XP命令行下如何用批处理进行数据的加减运算?可能要用到其它工具吧,能否提供并说明?
回复

使用道具 举报

3#
 楼主| 发表于 2005-5-17 17:01:23 | 只看该作者

在XP命令行下如何用批处理比较数据大小?

谢谢!一直以为XP命令行与纯DOS下的差不多,想不到就是IF命令功能增强了这么多!
回复

使用道具 举报

2#
发表于 2005-5-17 16:18:03 | 只看该作者

在XP命令行下如何用批处理比较数据大小?


set var1=3
set var2=2
if %var1% GTR %var2% goto ...

if /?:
执行批处理程序中的条件处理。
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
  NOT               指定只有条件为 false 的情况下,Windows 才
                    应该执行该命令。
  ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                    指定数字的退出编码,指定条件为 true。
  string1==string2  如果指定的文字字符串匹配,指定条件为 true。
  EXIST filename    如果指定的文件名存在,指定条件为 true。
  command           如果符合条件,指定要执行的命令。如果指定的
                    条件为 FALSE,命令后可跟一个执行 ELSE
                    关键字后的命令的 ELSE 命令。
ELSE 子句必须在 IF 之后出现在同一行上。例如:
    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )
因为 del 命令需要用一个新行终止,以下子句不会有效:
IF EXIST filename. del filename. ELSE echo filename. missing
由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
不会有效:
    IF EXIST filename. del filename.
    ELSE echo filename. missing
如果都放在同一行上,以下子句有效:
    IF EXIST filename. (del filename.) ELSE echo filename. missing
如果命令扩展被启用,IF 会如下改变:
    IF [/I] string1 compare-op string2 command
    IF CMDEXTVERSION number command
    IF DEFINED variable command
其中, compare-op 可以是:
    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于
而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
/I 开关可以用于 IF 的 string1==string2 的形式上。这些
比较都是通用的;原因是,如果 string1 和 string2 都是
由数字组成的,字符串会被转换成数字,进行数字比较。
CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
是在跟与命令扩展有关联的内部版本号比较。第一个版本
是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
命令扩展被停用时,CMDEXTVERSION 条件不是真的。
如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,
除了它取得一个环境变量,返回的结果是 true。
如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到
其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:
    goto answer%ERRORLEVEL%
    :answer0
    echo Program had return code 0
    :answer1
    echo Program had return code 1
您也可以使用以上的数字比较:
    IF %ERRORLEVEL% LEQ 1 goto okay
如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
命令行;否则,您会得到其数值。
如果没有名为 CMDEXTVERSION 的环境变量,
%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
字串符表达式;否则,您会得到其数值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-28 04:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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