For循环语句详解.docx

上传人:b****6 文档编号:7440736 上传时间:2023-05-11 格式:DOCX 页数:20 大小:25.33KB
下载 相关 举报
For循环语句详解.docx_第1页
第1页 / 共20页
For循环语句详解.docx_第2页
第2页 / 共20页
For循环语句详解.docx_第3页
第3页 / 共20页
For循环语句详解.docx_第4页
第4页 / 共20页
For循环语句详解.docx_第5页
第5页 / 共20页
For循环语句详解.docx_第6页
第6页 / 共20页
For循环语句详解.docx_第7页
第7页 / 共20页
For循环语句详解.docx_第8页
第8页 / 共20页
For循环语句详解.docx_第9页
第9页 / 共20页
For循环语句详解.docx_第10页
第10页 / 共20页
For循环语句详解.docx_第11页
第11页 / 共20页
For循环语句详解.docx_第12页
第12页 / 共20页
For循环语句详解.docx_第13页
第13页 / 共20页
For循环语句详解.docx_第14页
第14页 / 共20页
For循环语句详解.docx_第15页
第15页 / 共20页
For循环语句详解.docx_第16页
第16页 / 共20页
For循环语句详解.docx_第17页
第17页 / 共20页
For循环语句详解.docx_第18页
第18页 / 共20页
For循环语句详解.docx_第19页
第19页 / 共20页
For循环语句详解.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

For循环语句详解.docx

《For循环语句详解.docx》由会员分享,可在线阅读,更多相关《For循环语句详解.docx(20页珍藏版)》请在冰点文库上搜索。

For循环语句详解.docx

For循环语句详解

Hellobat-DOSBAT批处理编程入门教程

(一)

介绍:

DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。

本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。

正文:

 

DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。

本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。

一、创建批处理的方法

(1)用记事本

打开记事本,输入DOS命令,保存的时候在保存类型处选择“所有文件”,文件名处填写批处理名称,例如demo.bat。

(2)利用copycon命令

运行命令行(cmd或command),输入copycondemo.bat,

输入DOS命令,按Ctrl+Z完成保存并退出。

二、我的第一个BAT程序

DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。

本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。

 

一、创建批处理的方法

(1)用记事本

打开记事本,输入DOS命令,保存的时候在保存类型处选择“所有文件”,文件名处填写批处理名称,例如demo.bat。

 

(2)利用copycon命令

运行命令行(cmd或command),输入copycondemo.bat,

输入DOS命令,按Ctrl+Z完成保存并退出。

 

 

二、我的第一个BAT程序

 

1

2

3

4

@echooff

cls

echoHellobat!

pause

首先解释一下echo命令,echo命令本身是用于显示字符,如上面的echoHellobat!

则会在屏幕上打上Hellobat!

一行字。

echooff命令表示此语句后的所有命令都不显示命令行本身,有点拗口不是吗?

举个刚才的例子吧,

如果没有echooff,则执行时屏幕显示:

1

2

3

4

5

C:

\DocumentsandSettings\Administrator\桌面>echoHellobat!

Hellobat!

  

C:

\DocumentsandSettings\Administrator\桌面>pause

请按任意键继续...

如果加了@echooff,则执行结果为:

1

2

Hellobat!

请按任意键继续...

@这个字符的作用是不显示本行的命令行,所以即不显示本行又不显示后续行命令,我们就用@echooff

pause命令会暂停批处理的执行并在屏幕上显示“请按任意键继续...”的提示,等待用户按任意键后继续。

另外,你可能拥有良好的编程习惯,在关键的地方写上注释,这个时候我们可以用Rem或:

:

符号,例如:

1

2

3

4

:

:

开始清除屏幕

cls

Rem开始输出

echoHellobat!

先到这里吧!

我在

变量-DOSBAT批处理编程入门教程

(二)

既然我们称之为批处理编程,那么变量是少不了的,在批处理中既可以自定义变量也可以使用系统变量,我们先来了解一下自定义变量。

 

(1)自定义变量

 

请看如下命令:

 

1

2

3

4

5

@echooff

setmyname=

setmyage=3

echo%myname%isabout%myage%yearsold

pause

运行结果:

isabout3yearsold

关键是set命令的使用,setvar=变量值,var是变量的名称,当需要在其它地方使用这个变量时,需要用两个%括起来,如%var%

(2)变量的算术运算

在进行算术运算时,我们需要给set命令加上/a参数,后面再跟表达式。

例如:

1

2

3

4

setvar=100

set/avar=200+10

set/avar+=15

echo%var%

运行结果为225

这里的var+=15相当于var=%var%+15

(3)变量的逻辑运算与取余运算

需要将运算符用双引号表示出来:

1

2

3

4

5

set/avar=3"&"7

set/avar=2"^"6

set/avar=2"<<"3

set/avar=256">>"2

set/avar=83"%"10

批处理支持的运算符按优先权顺序:

()         -分组

!

~-        -一元运算符

*/%        -算数运算符

+-         -算数运算符

<<>>        -逻辑移位

&          -按位“与”

^          -按位“异”

|          -按位“或”

=*=/=%=+=-=  -复合赋值运算符

&=^=|=<<=>>=  -复合赋值运算符

          -表达式分隔符

表达式分隔符的作用是在一行中写多个表达式,例如:

1

2

set/avar1=1,var2=8

echo%var1%%var2%

(4)获取键盘输入到变量

set命令有一个/p参数,可以帮助我们获得键盘输入:

1

2

set/pvar=-^>请选择:

echo您的选择是:

%var%

这在我们显示菜单供用户选择的时候是非常有用的,当加上/p参数,等号后面的内容就是用于显示的字符,并非给变量赋值。

系统变量-DOSBAT批处理编程入门教程(三)

系统变量实际是操作系统中的系统变量,我们在命令行中可以直接使用。

这些系统变量有些可以读写,有些是只读的。

下面我们列举一下系统变量及其意义以便使用时参考之用。

 

%ALLUSERSPROFILE% (本地)返回“所有用户”配置文件的位置。

%APPDATA% (本地)返回默认情况下应用程序存储数据的位置。

%CD%(本地)返回当前目录字符串。

%CMDCMDLINE%(本地)返回用来启动当前的Cmd.exe的准确命令行。

%CMDEXTVERSION%(系统)返回当前的“命令处理程序扩展”的版本号。

%COMPUTERNAME% (系统)返回计算机的名称。

%COMSPEC% (系统)返回命令行解释器可执行程序的准确路径。

%DATE% (系统)返回当前日期。

使用与date/t命令相同的格式。

由Cmd.exe生成。

有关date命令的详细信息,请参阅Date。

%ERRORLEVEL% (系统)返回上一条命令的错误代码。

通常用非零值表示错误。

%HOMEDRIVE% (系统)返回连接到用户主目录的本地工作站驱动器号。

基于主目录值而设置。

用户主目录是在“本地用户和组”中指定的。

%HOMEPATH% (系统)返回用户主目录的完整路径。

基于主目录值而设置。

用户主目录是在“本地用户和组”中指定的。

%HOMESHARE% (系统)返回用户的共享主目录的网络路径。

基于主目录值而设置。

用户主目录是在“本地用户和组”中指定的。

%LOGONSERVER% (本地)返回验证当前登录会话的域控制器的名称。

%NUMBER_OF_PROCESSORS% (系统)指定安装在计算机上的处理器的数目。

%OS% (系统)返回操作(系统)名称。

Windows2000显示其操作系统为Windows_NT。

%PATH%(系统)指定可执行文件的搜索路径。

%PATHEXT%(系统)返回操作系统认为可执行的文件扩展名的列表。

%PROCESSOR_ARCHITECTURE% (系统)返回处理器的芯片体系结构。

值:

x86或IA64基于Itanium

%PROCESSOR_IDENTFIER%(系统)返回处理器说明。

%PROCESSOR_LEVEL% (系统)返回计算机上安装的处理器的型号。

%PROCESSOR_REVISION%(系统)返回处理器的版本号。

%PROMPT%(本地)返回当前解释程序的命令提示符设置。

由Cmd.exe生成。

%RANDOM%(系统)返回0到32767之间的任意十进制数字。

由Cmd.exe生成。

%SYSTEMDRIVE%(系统)返回包含Windowsserveroperatingsystem根目录(即系统根目录)的驱动器。

%SYSTEMROOT% (系统)返回Windowsserveroperatingsystem根目录的位置。

%TEMP%和%TMP%(系统)和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。

有些应用程序需要TEMP,而其他应用程序则需要TMP。

%TIME%(系统)返回当前时间。

使用与time/t命令相同的格式。

由Cmd.exe生成。

有关time命令的详细信息,请参阅Time。

%USERDOMAIN%(本地)返回包含用户帐户的域的名称。

%USERNAME%(本地)返回当前登录的用户的名称。

%USERPROFILE%(本地)返回当前用户的配置文件的位置。

%WINDIR%(系统)返回操作系统目录的位置。

 

在这些系统变量中,最常用的是目录相关的系统变量,例如:

 

1

2

3

4

5

6

7

8

:

:

将1.doc复制到Windows目录下

copy1.doc"%WINDIR%\"

  

:

:

将2.doc复制到TEMP目录下

copy2.doc"%TEMP%\"

  

:

:

将3.doc复制到当前账号的启动中

copy3.doc"%USERPROFILE%\「开始」菜单\程序\启动\"

程序流程控制基础-DOSBAT批处理编程入门教程(四)

批处理中的流程控制语句主要可以分为三类:

选择语句、循环语句和跳转语句。

在每种语句中都会执行一个检测,检测一个布尔型值,该布尔型值控制批处理的执行流程。

 

(1)选择语句ifelse

先看例子

1@echooff

2setvar=""

3if%var%==""setvar=10

4if%var%GEQ10echo值大于等于10

5pause

 

代码中,用if语句判断var变量的值,如果为空,则赋值10,然后第2条if语句判断var的值是

不是大于等于10并输出结果。

这里用到了比较运算符GEQ,其它还有许多比较运算符:

EQU-等于

NEQ-不等于

LSS-小于

LEQ-小于或等于

GTR-大于

GEQ-大于或等于

另外,我们可以用not将布尔值取反,例如:

1ifnot%var%LSS10echo值不小于10

再来看看使用else的例子:

1@echooff

2setvar=""

3if%var%==""setvar=10

4if%var%GTR10(echo值大于10)else(echo值小于等于10)

5pause

 

代码中,如果var大于10,输出“值大于10”,否则输出“值小于等于10”

另外,if有一个/i参数,表明忽略大小写,例如:

1setvar="aBc"

2if/i%var%=="abc"echoabc

(2)循环语句for

这里只简单介绍一下for配合/l参数的使用方法,更多使用方法请看下节。

格式是这样的:

FOR/L%variableIN(start,step,end)DOcommand[command-parameters]

先看例子:

1for/l%%iin(0,1,5)doecho%%i

运行结果输出:

012345

这条语句的意思是变量%%i从0到5,递增1循环

其中的start,step,end可以使用变量,例如:

1setbegin=5

2setend=1

3setstep=-1

4for/l%%iin(%begin%,%step%,%end%)doecho%%i

(3)跳转语句goto

goto语句的作用是跳转到指定标签段,首先我们需要定义标签段,例如:

:

exitdoor

需要跳转到exitdoor的地方只要gotoexitdoor即可,一般我们配合if来使用:

1@echooff

2set/pinput=请选择

(1)退出,

(2)继续:

3if%input%==1gotoexitdoor

4echo继续工作...

5pause

6exit

7

8:

exitdoor

9echo下班了!

10,pause

这个例子中从键盘获取输入,如果是1,则跳到exitdoor处,否则继续向下执行。

For循环语句详解-DOSBAT批处理编程入门教程(五)

格式:

FOR[参数]%%变量名IN(相关文件或命令) DO执行的命令

  作用:

对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。

  注意:

在批处理文件中使用FOR命令时,指定变量请使用%%variable,而不要用%variable。

变量名称是区分大小写的,所以%i不同于%I.

  关于:

for命令可以带参数或不带参数,带参数时支持以下参数:

/d/l/r/f

  下面分别解释一下

 

零:

无参数时:

 

  FOR%variableIN(set)DOcommand[command-parameters]

  %variable 指定一个单一字母可替换的参数。

  (set)   指定一个或一组文件。

可以使用通配符。

  command  指定对每个文件执行的命令。

  command-parameters

  为特定命令指定参数或命令行开关。

 

  示例:

  for%%iin(t*.*)doecho%%i--显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径) 

  for%%iin(d:

\mydocuments\*.doc)do@echo%%i--显示d:

\mydocuments\目录下与*.doc相匹配的文件

 

一、参数/d(参数只能显示当前目录下的目录名字)

 

  格式:

FOR/D%variableIN(set)DOcommand[command-parameters]

  这个参数主要用于目录搜索,不会搜索文件,/D参数只能显示当前目录下的目录名字。

(TTT特别说明:

只会搜索指定目录下的目录,不会搜索再下一级的目录。

 

  示例:

  for/d%%iin(c:

\*)doecho%%i --显示c盘根目录下的所有目录

  for/d%%iin(?

?

?

)doecho%%i --显示当前目录下名字只有1-3个字母的目录

 

二、参数/R(搜索指定路径及所有子目录中与set相符合的所有文件)

 

  格式:

FOR/R[[drive:

]path]%variableIN(set)DOcommand[command-parameters]

  此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。

 

  1、set中的文件名如果含有通配符(?

或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。

  2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。

  例:

for/rc:

\%%iin(*.exe)doecho%%i--把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!

!

!

!

 

  示例:

  for/rc:

\%%iin(boot.ini)doecho%%i--枚举了c盘所有目录

  for/rd:

\backup%%iin

(1)doecho%%i --枚举d\backup目录

  for/rc:

\%%iin(boot.ini)doifexist%%iecho%%i --很好的搜索命令,列举boot.ini存在的目录

 

三、参数/L(该集表示以增量形式从开始到结束的一个数字序列。

可以使用负的Step)

 

  格式:

FOR/L%variableIN(start,step,end)DOcommand[command-parameters]

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

可以使用负的Step

 

  示例:

  for/l%%iin(1,1,5)do@echo%%i --输出12345

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

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

  for/l%%iin(1,1,5)dostartcmd --打开5个CMD窗口

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

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

 

四、参数/F

格式:

FOR/F["options"]%%iIN(file)DOcommand

 

FOR/F["options"]%%iIN("string")DOcommand

 

FOR/F["options"]%%iIN('command')DOcommand

 

这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果。

 

file代表一个或多个文件

 

string代表字符串

 

command代表命令

 

["options"]可选

 

对于FOR/F%%iIN(file)DOcommand

 

file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子。

 

假如文件a.txt中有如下内容:

 

第1行第1列第1行第2列第1行第3列

第2行第1列第2行第2列第2行第3列

第3行第1列第3行第2列第3行第3列

 

你想显示a.txt中的内容,会用什么命令呢?

当然是type,typea.txt

 

for也可以完成同样的命令:

 

for/f%%iin(a.txt)doecho%%i

 

还是先从括号执行,因为含有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,

 

{“第1行第1列第1行第2列第1行第3列”,rem第一个元素

 

“第2行第1列第2行第2列第2行第3列”,rem第二个元素

 

“第3行第1列第3行第2列第3行第3列”} rem第三个元素

 

集合中只有3个元素,同样用%%i依次代替每个元素,然后执行do后面的命令。

 

具体过程:

 

用%%i代替“第1行第1列第1行第2列第1行第3列”,执行do后面的echo%%i,显示“第1行第1列第1行第2列第1行第3列”,

 

用%%i代替“第2行第1列第2行第2列第2行第3列”,执行echo%%i,显示“第2行第1列第2行第2列第2行第3列”,

 

依次,直到每个元素都代替完为止。

 

为了加强理解/f的作用,请执行一下两个命令,对比即可明白:

 

for/f%%iin(a.txt)doecho%%irem这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中 

的内容。

 

for%%iin(a.txt)doecho%%irem而这个只会显示a.txt这个名字,并不会读取其中的内容。

 

通过上面的学习,我们发现for/f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?

不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。

 

它们就是:

delims和tokens

 

delims用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

 

比如,还是上面的文件,我们执行下面的命令:

 

for/f"delims="%%iin(a.txt)doecho%%i

 

显示的结果是:

 

第1行第1列

第2行第1列

第3行第1列

 

为什么是这样的呢。

因为这里有了delims这个参数,=后面有一个空格,意思是再将每个元素以空格分割,默认是只取分割之后的第一个元素。

 

执行过程是:

 

将第一个元素“第1行第1列第1行第2列第1行第3列”分成三个元素:

“第1行第1列”“第1行第2列”“第1行第3列”,它默认只取第一个,即“第1行第1列”,然后执行do后面的命令,依次类推。

 

但是这样还是有局限的,如果我们想要每一行的第二列元素,那又如何呢?

 

这时候,tokens跳出来说,我能做到。

 

它的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个。

 

还是上面的例子,执行如下命令:

 

for/f"tokens=2delims="%%iin(a.txt)doec

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2