兔子的技术博客

兔子

   :: 首页 :: 联系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新评论

阅读排行榜

评论排行榜

批处理比较数值大小 lss,equ和gtr的用法

★电脑综合★ 2010-04-17 14:18:39 阅读196 评论0    字号: 订阅

     EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

比较大小.bat的源程序如下:

@echo off
set /p 第一个数=请输入第一个数- c% F. C2 k: ~# R
set /p 第二个数=请输入第二个数
if %第二个数% lss %第一个数% goto hero7 |! U; ~8 ?5 ?7 p9 g6 v. Y3 w" K0 v
if %第二个数% equ %第一个数% goto her
if %第二个数% gtr %第一个数% goto he9 @! i8 q& c; j; Z/ Q% ]
pause2 W) H7 w/ R$ @   g8 P
exit
:hero& b8 K1 _5 C' U0 A/ l% D
echo 第一个数比第二个数大!
pause# A6 \8 X9 P) t- B9 Z- g2 e1 a
%0
:her' t) K1 j. h# L
echo 第一个数等于第二个数!
pause
%0
:he- o$ e* U# ]" }4 |! V% ^" c
echo 第一个数比第二个数小!
pause
%07 \! s- e$ [0 E6 @
: T+ d6 Y# o0 [" H4 P% C

比较大小另 版.bat 的源程序如下:
5 B. b6 H8 i/ D* L
@echo off; R% @1 ~% g' W
set /p 第一个数=请输入第一个数
set /p 第二个数=请输入第二个数
if %第二个数% lss %第一个数% goto hero
if %第二个数% equ %第一个数% goto her' N( d7 j   i$ r8 e" A
if %第二个数% gtr %第一个数% goto he" h2 ~4 P2 m' V
:hero0 h( k, ?) \( C" t, \
echo 第一个数比第二个数大!5 a4 i$ L7 p% M; e% ]! T
pause
goto end
:her& ~2 r' Q7 X! g: j0 I& x
echo 第一个数等于第二个数!
pause$ k4 |( v4 B: _$ `" ~
goto end
:he   ^3 U/ K* S" W- D7 o: t
echo 第一个数比第二个数小!
pause
goto end
:end. t; R( v+ H# l4 C0 l( f( _. q# i
exit





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


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 当前数值的
字串符表达式;否则,您会得到其数值。

IF (DOS命令)

  执行批处理程序中的条件处理。

  IF [NOT] ERRORLEVEL number command

  IF [NOT] string1==string2 command

  IF [NOT] EXIST filename command

  NOT 指定只有条件为 false 的情况下, Windows XP 才

  应该执行该命令。

  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 string1 compare-op string2 command

  IF CMDEXTVERSION number command

  IF DEFINED variable command

  其中,比较运算符可以是:

  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 当前数值的

  字串符表达式;否则,您会得到其数值。

if中gtr的特殊应用(时间&字母对比命令)

2009年05月06日 星期三 16:49
if中gtr的特殊应用作者:youxi01
转载请注明

一、直接对日期大小进行比较。
比如,我要查找当前目录下,在2005-5-30以后的文件,则可以这样写:
复制内容到剪贴板 代码:

@echo off
for %%i in (*) do if %%~ti gtr 2005-05-30 echo %%~nxi
pause>nul

二、对字母直接进行比较。
复制内容到剪贴板 代码:

@echo off
call :echo c o
echo.
call :echo d k
pause>nul
:echo startw endw
echo %1 到 %2 之间的字母有:
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
if %%i geq %1 if %%i leq %2 set /p=%%i <nul)

三、更奇妙的是,汉字和英文字也可以比较“大小”---找出字符串中的汉字
测试代码: 复制内容到剪贴板 代码:@echo off
setlocal enabledelayedexpansion
set "str=我bat是home好.cn人"
call :test "%str%"
echo 提取出的汉字有:%cstr%
pause>nul
:test
set "var=%~1"
for /l %%i in (0 1 20) do (
set "var_=!var:~%%i,1!"
if "!var_!"=="" goto :eof
if !var_! gtr Z set cstr=!cstr!!var_!


转自:http://blog.chinaunix.net/uid-78707-id-3473907.html
posted on 2013-10-16 19:46 会飞的兔子 阅读(2748) 评论(0)  编辑 收藏 引用 所属分类: 系统API,底层技术软件使用和系统维护

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理