批处理各符号的功能1.docx

上传人:b****4 文档编号:3932121 上传时间:2022-11-26 格式:DOCX 页数:22 大小:27.76KB
下载 相关 举报
批处理各符号的功能1.docx_第1页
第1页 / 共22页
批处理各符号的功能1.docx_第2页
第2页 / 共22页
批处理各符号的功能1.docx_第3页
第3页 / 共22页
批处理各符号的功能1.docx_第4页
第4页 / 共22页
批处理各符号的功能1.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

批处理各符号的功能1.docx

《批处理各符号的功能1.docx》由会员分享,可在线阅读,更多相关《批处理各符号的功能1.docx(22页珍藏版)》请在冰豆网上搜索。

批处理各符号的功能1.docx

批处理各符号的功能1

批处理各符号的功能1.

echo有两个状态一个是on一个是off默认的是on它的功能是显示当前文件的路径,如果不写on或者是off的时候,默认情况下

是打开的即显当前文件的路径,加上off后,所有路径都不显示,但是echooff这行还能显出来,要让这行也消失的话就在它们前面

加一个@即@echooff,另外echo命令的另一种用法,可以直接编辑文本文件,例如:

echonetstat-an>a.bat结晶果是在当前目录下生成一个a.bat的文件,双击直接执行这个文件时,就会执行netstat-an这个命令

2.

>这个字符的意思是将">"前面的内容传递并且覆盖">"后面的内容,它所起的作用是将运行的回显结果传递到后面的范围.

例如:

ipconfig.txt中的内容是1113333,执行ipconfig/all>ipconfig.txt即将ipconfig/all的内容覆盖原有的1113333。

与这个

符号相似的还有>>它的功能不是覆盖而追加,即将运行后的内容加到原来的1113333后。

3.

|这是一个管道传输命令,意思是将上一命令执行的结果传到下一个命令去处理

例如:

dirc:

\|find"txt"

以上命令是:

查找C:

\所有,并发现TXT字符串。

||

Usage:

第一条命令||第二条命令[||第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令

;(只要正确后面的就不执行)

4.

^是对特殊符号"<",">","&"的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊

意义。

例如:

C:

\>echoipconfig.txt^>ipconfig

结果为:

ipconfig.txt>ipconfig没有追加只是显示出来而已

5.

&这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行

例如:

C:

\>dird:

/p&dire:

/p&dirc:

/p

结果是先后执行

6.

&&这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行

例如:

C:

\>dirw:

/p&&dire:

/p&&dirc:

/p由于电脑上没有w盘所以显示结果为:

系统找不到指定的路径。

这样以来,后面的

两个盘就不执行啦。

(当第n个命令失败时此命令后面的命令将不再执行,也就是说一直执行到失败为止)

7.

""双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法

cd"programfiles"

cdprogra~1

cdpro*

以上三种方法都可以进入programfiles这个目录

8.

逗号相当于空格,在某些情况下“,”可以用来当做空格使

比如

dir,c:

\

9.

;分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序还是

会执行。

比如:

dirc:

\;d:

\e:

\;f:

\

以上命令相当于

dirc:

\

dird:

\

dire:

\

dirf:

\

但是前面执行的盘不存在的话,后面的命令将不会执行。

例如:

C:

\>dirw:

;d:

/p;e:

/p

结果为:

系统找不到指定的路径。

10.在echo的后面加一个点,所起到的作用是显示一空行。

以下范例显示的批处理程序包含前后各有一个空行的三行消息:

@echooff

echo.

echoThisbatchprogram

echoformatsandchecks

echonewdisks

echo.

如果想让打开的批处理命令的标题栏有名字的话可以用到title这个参数

titlefilename

">nul2>nul"可以屏蔽一切屏幕的输出,例如:

dir>nul2>nul这样屏幕上什么都不会输出,也就是没有结果。

1>nul表示将正确执行目录树的信息禁止输出,2>nul表示将执行过程中的错误信息禁止输出。

断开网络连接方法有两种:

一种是rasphone/hadsl,另一种是rasdialadsl/d

11.goto一般和:

是联用的goto跳转的地方入口就是":

"。

goto命令的另一种用法一:

提前结束程序。

在程序中间使用goto命令跳转到

某一标签,而这一标签的内容却定义为退出。

如:

……

gotoend

……

:

end

dir中有些命令是要牢记的

dird:

/s/p/b(/a这后面还有一些参数像h,r,d,s/d)具体的可以看帮助

%userprofile%在写批处理时这个相当于C:

\DocumentsandSettings\Administrator

在结束关键进程的时候,要先结束explorer.exe这个进程,最好用系统自带的工具taskkill这个关explorer.exe的时候任何杀毒软件

都没有提示,但是如果换成了用ntsd关的话,卡巴斯基会报毒,而且这时的explorer会在关闭的一下后马上自启动,而taskkill就会

一直关着直到等你开启为止。

在使用for的时候当用到/d时,那是因为set中有*?

这两个通配符

shift

1.可替代参数的编号是%o-%9,如果要在一个命令行上使用超过10个可以被代换的参数,则可使用SHIFT命令来突破此限制。

2.每当执行sHIFT一次,命令行上的所有参数将向左移动一位。

%1的内容将为%2的内容所取代…,%9内容则由新的参数取代。

3.%o表示批处理文件本身的名称,永远不变,所以每次执行时可以在批处理文件使用一次shift就向右移动一位,例如:

a.bat的内容:

@echo%1%2%3%4%5%6%7%8%9

shift

@echo%1%2%3%4%5%6%7%8%9

shift

@echo%1%2%3%4%5%6%7%8%9

pause

运行

c:

\>a1234567891011(其后有11个参数)

123456789(取到最前面9个参数)

c:

\>shift(移位)

234567891011(取到另外9个参数)

c:

\>shift(移位)

345678910(取到另外9个参数)

在批处理中del/f/s/q可以删除指定目录下的任何文件,但是不能删除文件夹,rd/s/q不但可以删除指定目录下的文件夹而且还

可以删除目录下的所有文件,以前总是以为rd只能删除文件夹,现在才知道用这个命令还以删除文件夹

@echooff@echooff

:

top:

top

if(%1)==()gotoendif(%1)==()gotoend

shiftshift

echostillrunningechostillrunning

gototopgototop

:

end:

end

看到了吧!

两个程序就是第三行的goto前面不一样,第一个有一个空格,而第二个没有,就是这个空格所产生的结果就不一样,第一

个结果是三行stillrunning,而第二个结果是一个无限制的循环,一直不停的显示stillrunning,所以写程序的时候一定要注意

errorlevel

若一个程序或DOS命令执行成功,则返回的E只RORLEVEL的值为o,否则为1至255之间AscII值的任意整数,其值只占一个字节约内存

空间,值得注意的是IF语句中检验的ERRORLEVEL值是大于或等于而不是等于,例如语句IFERRORLEVEL5检验的是ERRORLEVEL>=5而

不是ERRORLEVEL=5,因此对于5至255之间的任何整数,此语句检验结果都是真值。

在变量延迟时要用到setlocalEnableDelayedExpansion

例如:

@echooff

setlocalEnableDelayedExpansion

.......

然后写要用的代码

需要注意的是,一旦启用了变量延迟,就要用!

号把变量括起来,而不能用%号。

echo!

n!

显示变量n的值

例如:

@echooff&SETLOCALENABLEDELAYEDEXPANSION

setmm=gril&echo!

mm!

pause

ping在批处理中有延时的作用,开始的时候不知道怎么用,后来才发现,每ping一次的时间是一秒,所以写成ping/n10127.1或者

是ping/n10localhost效果是一样的,都能起来延时十秒的作用

set

SET/Aexpression

环境变量替换已如下增强:

%PATH:

str1=str2%

%PATH:

~10,5%

%PATH:

~-10%

%PATH:

~0,-2%

%PATH:

str1=str2%这个操作就是把变量%PATH%的里的str1全部用str2替换

例如:

@echooff

seta=

echo替换前的值:

"%a%"

setvar=%a:

=qq%

echo替换后的值:

"%var%"

pause

结果是:

替换前的值:

""很明显吧,那个空格被qq给代替啦^-^

替换后的值:

""

请按任意键继续...

@echooff

seta=

echo替换前的值:

"%a%"

setvar=%a:

.=伤脑筋%

echo替换后的值:

"%var%"

pause

解释setvar=%a:

.=伤脑筋%

set命令var变量名字a是要进行字符替换的变量的值,"."为要替换的值,

"伤脑筋"为替换后的值!

执行后就会把变量%a%里面的"."全部替换为"伤脑筋"

这就是set的替换字符的很好的功能!

先讲到这

%PATH:

~10,5%

@echooff

seta=

setvar=%a:

~1,2%

echo%var%

pause

执行后,我们会发现只显示了"bs"两个字母,我们的变量%a%的值不是为吗

怎么只显示了第2个字母和第3个字母"bs",分析一结果我们就可以很容易看出

%PATH:

~10,5%就是显示变量PATH里指定几位的值!

分析setvar=%a:

~1,2%

set命令var变量值a要进行字符操作的变量"1"从变量"a"第几位下一位开始显示"2"显示几位

和起来就是把变量a的值从第一位开始,把后两位赋予给变量var

%PATH:

~-10%例子

@echooff

seta=

setvar=%a:

~-3%

echo%var%

pause

这个的意思是从右往左取三位,把取到的部分给了var,如果把负号去掉,就成了从左往右去掉三位把剩下的部分给了var

%PATH:

~0,-2%例子

@echooff

seta=

setvar=%a:

~4,-3%

echo%var%

pause

结果是verybat,这段代码的意思是,从右去掉三位,把左剩余的部分,从第四位的下一位开始显示,把显示的内容给了var

如果改成setvar=%a:

~3,-3%结果就是.verybat

延迟和set的综合应用:

@echooff

setlocalenabledelayedexpansion

titleILoveGreatwall

setlove=ILoveGreatwallForever

for/l%%iin(1,1,24)do(cls

echo.!

love:

~0,%%i!

ping/n1127.1>nul2>nul)

pause

我觉得这段代码很意思,do里面的命令主要是分三块但是这三块不能在同一行,分三行写.因为它们是不同的命令,要想写在一行的

话要加&,写好后为for/l%%iin(1,1,24)do(cls&echo.!

love:

~0,%%i!

&ping/n1127.1>nul2>nul)

for

在DOs提示符下可直接使用FOR语句,用法的区别在于必须把%%variable写成%variable

关于FOR语句的使用方法,归纳如下:

(1)为了在各种DOS版本下都能运行,%%vart6le的变量必须为单个字符,应避

免使用%%o一%%9作为变量。

(2)FOR%%variaNeINtnles就)command%%variable其中Fileset必须放在

括号内,文件的个数没有限制,只要不超过D05命令行127个字符的限制即可,文件之

间用空格或逗号作为分隔符分开,文件名可以使用通配符。

(3)FoR语句中后面的变量有时可省略,如:

FOR%%aIN(*.BAK)D0DIR

(4)FOR语句的结尾如果执行另一个批处理程序,执行结束后,不再返回FOR语

FOR/D%%variableIN(set)DOcommand/D参数只能显示当前目录下的目录名字

@echooff

for/d%%iin(*)do@echo%%i

pause

把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示!

@echooff

for/d%%iin(?

?

?

)do@echo%%i

pause

这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了

这里解释下*号和?

号的作用,*号表示任意N个字符,而?

号只表示任意一个字符

FOR/R[[drive:

]path]%%variableIN(set)DOcommand

它可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字

@echooff

for/rc:

\%%iin(*.exe)do@echo%%i

pause

把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了

@echooff

for/r%%iin(*.exe)do@echo%%i

pause

以当前目录为搜索路径,显示当前目录的全部EXE文件列出来!

for/L%%Variablein(Start#,Step#,End#)doCommand

@echooff

for/l%%iin(1,1,5)dostartcmd

pause

看上面的startstepend就知道是什么意思了吧,开始,结束,步阶,按一步一个的话,就会总有六个cmd跳出来五个

设置默认的控制台前景和背景颜色。

for/F"ParsingKeywords"%%Variablein(FileNameSet)doCommand

"ParsingKeywords"

它表示4个参数

eol=c-指一个行注释字符的结尾(就一个)

skip=n-指在文件开始时忽略的行数。

delims=xxx-指分隔符集。

这个替换了空格和跳格键的

默认分隔符集。

tokens=x,y,m-n-指每行的哪一个符号被传递到每个迭代

的for本身。

这会导致额外变量名称的分配。

m-n

格式为一个范围。

通过nth符号指定mth。

如果

符号字符串中的最后一个字符星号,

那么额外的变量将在最后一个符号解析之后

分配并接受行的保留文本。

usebackq-指定新语法已在下类情况中使用:

在作为命令执行一个后引号的字符串并且一个单

引号字符为文字字符串命令并允许在filenameset

中使用双引号扩起文件名称。

例如:

新建一个文件名字为test.txt

内容为:

;哈哈

你好!

相信自己一定会成功……

NeverSayDie

好啦就这样吧

@echooff

FOR/F"eol=;tokens=1delims="%%iin(test.txt)do@echo%%i

pause

你好!

相信自己一定会成功……

Never

好啦就这样吧

这个命令会读取在当前目录下名为test.txt文件中的内容,然后将每一行的内容赋值给变量%%i,然后忽略掉以;号开头的行,并且以空

格做为分隔符号,打印第每行以空各做分隔符号的第一列

又例如:

@echooff

for/f"tokens=3delims=-"%%ain('date/t')do@echo%%a

pause

date/t的结果是:

2007-08-22星期三

所以批处理的结果为:

22

@echooff

for/f"tokens=2,3,4delims=-"%%ain('date/t')do@echo%%c-%%a-%%b

pause

结果为:

-08-22星期三

总结:

以上两个的结果都是从date/t中以"-"为分隔符,从左往右依次取第三列(这就是第一个的结果22),第二,三,四列(这就是

第二个的结果-08-22星期三),这个for以后的用处还很大.

FOR的变量全部列出来:

凡是%~开头的操作符,都是文件名的分离操作

~I-删除任何引号("),扩展%I

这个变量的作用就如他的说明,删除引号!

我们来看这个例子:

首先我们在桌面建立一个名字为temp.txt文本文件,在里面输入这些内容

"1111

2222"

"3333"

44"44

然后在建立个BAT文件代码如下:

FOR/F"delims="%%iIN(temp.txt)DO@echo%%~i

pause

执行后,我们看CMD的回显如下:

1111

2222"

3333

44"44

和之前temp.txt中的内容对比一下,我们会发现第一行和第三行的引号都消失了,这就是删除引号~i的作用了!

删除引号规则如下(BAT兄补充!

1、若字符串首尾同时存在引号,则删除首尾的引号;

2、若字符串尾不存在引号,则删除字符串首的引号;

3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除

%~fI-将%I扩展到一个完全合格的路径名

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~fi

pause

执行后显示内容如下

C:

\DocumentsandSettings\Administrator\桌面\test.bat

C:

\DocumentsandSettings\Administrator\桌面\test.vbs

当我把代码中的%%~fi直接改成%%i

FOR/F"delims=="%%iIN('dir/b')DO@echo%%i

pause

执行后就会显示这些内容

test.bat

test.vbs

%~dI-仅将%I扩展到一个驱动器号

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~di

pause

执行后我CMD里显示如下

C:

C:

%%~di作用是,如果变量%%i的内容是一个文件或者目录名,那么%%~di就会把%%i这文件或者目录所在的盘符号打印出来!

%~pI-仅将%I扩展到一个路径

这个用法和上面一样,他只打印路径不打印文件名字

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~pi

pause

\DocumentsandSettings\Administrator\桌面\

%~nI-仅将%I扩展到一个文件名

只打印文件名字

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~ni

pause

test

%~xI-仅将%I扩展到一个文件扩展名

只打印文件的扩展名

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~xi

pause

.vbs

.bat

.txt

.txt

.txt

%~sI-扩展的路径只含有短名

打印绝对短文件名

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~si

pause

C:

\DOCUME~1\ADMINI~1\桌面\a.vbs

C:

\DOCUME~1\ADMINI~1\桌面\a2.bat

C:

\DOCUME~1\ADMINI~1\桌面\q.txt

C:

\DOCUME~1\ADMINI~1\桌面\test.txt

C:

\DOCUME~1\ADMINI~1\桌面\_讨论_~1.TXT

C:

\DOCUME~1\ADMINI~1\桌面\常用工具

%~aI-将%I扩展到文件的文件属性

打印文件的属性

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~ai

pause

--a------

--a------

--a------

--a------

--a------

dr-------

%~tI-将%I扩展到文件的日期/时间

打印文件建立的日期

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~ti

pause

2007-08-2112:

30

2007-08-2218:

40

2007-08-2212:

31

2007-08-2217:

58

2007-08-1923:

23

2007-08-1614:

28

%~zI-将%I扩展到文件的大小

打印文件的大小

FOR/F"delims=="%%iIN('dir/b')DO@echo%%~zi

pause

76

439

558

64

34614

0

最后一个不是个文件而是一个文件夹,所以显示为0,其实不为0的

%~$PATH:

I-查找列在路径环境变量的目录,并将%I扩展

到找到的第一个完全合格的名称。

如果环境变量名

未被定义,或者没有找到文件,此组合键会扩展到

空字符串

我们先在桌面建立一个temp.txt文件,里面写上这些内容

c:

\windows

c:

\windows\system32

c:

\windows\teett

然后在把这些代码保存为批处理,放在桌面.

FOR/F"delims=="%%iIN(temp.txt)DO@echo%%~$PATH:

i

pause

执行后CMD显示如下内容

c:

\WINDOWS

c:

\WINDOWS\system32

ECHO处于打开状态。

为什么会这样呢,还有一行c:

\windows\teett呢?

我们直接在CMD里输入echo%path%会显示C:

\WINDOWS\system32;C:

\WINDOWS;C:

\WINDOWS\Sys

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1