返回首页
当前位置: 主页 > Windows教程 >

Windows批处理bat基础知识总结大全(2)

时间:2016-05-23 20:09来源:Office教程学习网 www.office68.com编辑:麦田守望者

9.If 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串"  待执行的命令

检测字符串

(注意,用if检测字符串是否相等的时候,后面用的不是“=”,而是“==”)
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

检测数值:(注意,批处理中大于符号不能用:“>”,而用"gtr",其它的也类似)

比较运算符一览:

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

Sql代码

  1. @echo off
  2. set /a num1=20
  3. set /a num2=15
  4. if %num1% gtr %num2% echo %num1%大于%num2%
  5. if %num1% EQU %num2% echo %num1%等于%num2%
  6. if %num1% LSS %num2% echo %num1%小于%num2%
  7. pause>nul

、if exist 文件名  待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字  待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。

说明:环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。

常用命令的返回值及其代表的意义

IF [NOT]  ERRORLEVEL number   do command

IF [NOT]  string1==string2   do command

IF [NOT]  EXIST filename   do command

10.for 命令

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I

for /f %%i in (a.txt) do echo %%i

//这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中的内容。

for %%i in (a.txt) do echo %%i

//而这个只会显示a.txt这个名字,并不会读取其中的内容。

for %%a in (c:\*.*) do echo %%a

::显示C盘根目录下所有非隐藏、非系统属性文件

::只显示文件,不显示文件夹

一、/d

(只搜索目录,不搜索文件)

格式:FOR /D %variable IN (set) DO command [command-parameters]

for /d %%i in (c:/*) do echo %%i  --显示c盘根目录下的所有目录

for /d %%i in (???) do echo %%i   --显示当前目录下名字只有1-3个字母的目录(注意是目录)

二、/R

(只搜索文件,不搜索目录)

(搜索指定路径及所有子目录中与set相符合的所有文件)

格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

for /r c:/ %%i in (boot.ini) do echo %%i

--枚举了c盘所有目录,找到含有boot.ini的路径并显示

for /r d:/backup %%i in (1) do echo %%i

--枚举d/backup目录,现在当前路径和当前路径下所有文件夹,不过后面带了个1

d:\backup\1

for /r c:/ %%i in (boot.ini) do if exist %%i echo %%i

--很好的搜索命令,列举boot.ini存在的目录

三、/L 

(以增量形式从开始到结束的一个数字序列。可以使用负的 Step)

格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]

该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step

示例:

for /l %%i in (1,1,5) do @echo %%i  --输出1 2 3 4 5

for /l %%i in (1,2,10) do @echo %%i  --输出1,3,5,7,9

for /l %%i in (100,-20,1) do @echo %%i  --输出100,80,60,40,20

for /l %%i in (1,1,5) do start cmd  --打开5个CMD窗口

for /l %%i in (1,1,5) do md %%i  --建立从1~5共5个文件夹

for /l %%i in (1,1,5) do rd /q %%i  --删除从1~5共5个文件夹

setlocal 与 变量延迟

例1:

@echo off

set a=4

set a=5 & echo %a%

pause

结果:4

解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?

(set a=5

echo %a%

::这种情况a直接是5

)

让我们先了解一下批处理运行命令的机制:

批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理

在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。)

而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。

那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:

例2:

@echo off

setlocal enabledelayedexpansion

set a=4

set a=5 & echo !a!

pause

结果:5

解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。

分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量a赋值为4,“set a=5 & echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。

再举一个例子巩固一下。

例3:

@echo off

setlocal enabledelayedexpansion

for /l %%i in (1,1,5) do (

set a=%%i

echo !a!

)

pause

结果:

1

2

3

4

5

(若不加延迟变量,则会输出几个!a!字符)

解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什

么结果呢?结果是这样的:

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

即没有感知到for语句中的动态变化。

------分隔线----------------------------
标签(Tag):windows10 windows8 windows教程 windows技巧
------分隔线----------------------------
推荐内容
猜你感兴趣