无忧启动论坛
标题:
在XP命令行下如何用批处理比较数据大小?
[打印本页]
作者:
wyboy
时间:
2005-5-17 16:03
标题:
在XP命令行下如何用批处理比较数据大小?
在想WIN XP/2000的命令行下用批处理来比较数据的大小,如 “IF 3 > 2 GOTO...”,当然这样是实现不了的,能否借助什么工具实现这个目的呢?
作者:
Climbing
时间:
2005-5-17 16:18
标题:
在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 当前数值的
字串符表达式;否则,您会得到其数值。
作者:
wyboy
时间:
2005-5-17 17:01
标题:
在XP命令行下如何用批处理比较数据大小?
谢谢!一直以为XP命令行与纯DOS下的差不多,想不到就是IF命令功能增强了这么多!
作者:
wyboy
时间:
2005-5-17 17:55
标题:
在XP命令行下如何用批处理比较数据大小?
还有请问在XP命令行下如何用批处理进行数据的加减运算?可能要用到其它工具吧,能否提供并说明?
作者:
wyboy
时间:
2005-5-17 22:15
标题:
在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
作者:
Climbing
时间:
2005-5-18 11:16
标题:
在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
作者:
dudubird
时间:
2009-6-19 17:49
如果要实现 if 10<%ver%<100 goto 的效果怎么办?有没有简洁有效的代码可以实现!有没有人知道,谢谢!
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3