当前位置: 移动技术网 > IT编程>网络>Dos/Bat > 又一篇不错的批处理bat学习教程第1/5页

又一篇不错的批处理bat学习教程第1/5页

2017年12月12日  | 移动技术网IT编程  | 我要评论

综上:“|”命令的作用,就是让前一命令的输出当做后一命令的输入。 

“>、>>” 

这两个命令的效果从本质上来说都是一样的,他们都是输出重定向命令,说的通俗一点,就是把前面命令的输出写入到一个文件中。这两个命令的唯一区别是,>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。例十五: 
复制代码 代码如下:

echo @echo off > a.bat  
echo echo this is a pipeline command example. >> a.bat  
echo echo it is very easy? >> a.bat  
echo echo believe your self! >> a.bat  
echo pause >> a.bat  
echo exit >> a.bat  


复制粘贴上面代码,将在当前目录下生成一个a.bat文件,里面的内容如下: 

复制代码 代码如下:

@echo off  
echo this is a pipeline command example.  
echo it is very easy?  
echo believe your self!  
pause  
exit  


看到这里,你得到了多少信息?1、可以直接在dos提示符下利用echo命令的写入功能编辑一个文本,而不需要专门的文本编辑工具;2、管道命令>和>>的区别如上所述。如果这里只用>命令来完成上面操作,最后也会生成一个a.bat,但里面的内容就只剩下最后一行exit了。所以>和>>一般都联合起来用,除非你重定向的输出只有一行,那么就可以只用>了。结合例一再仔细体会输出重定向管道命令>和>>的用法。 

“<、>&、<&” 

这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。 

<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。 
>&,将一个句柄的输出写入到另一个句柄的输入中。 
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。 

关于这三个管道命令的举例,在后面批处理脚本的精妙应用中还将涉及到。 


下面介绍组合命令:&、&&、|| 

组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。它的格式很简单----既然现在已经成了一个文件了,那么这多个命令就要用这些组合命令连接起来放在同一行----因为批处理认行不认命令数目。组合命令的作用,就如同给爱人陪不是,说一句是说,说十句也是说,不一次把好话都说了出来,效果可能会好些----当然得排除一种特殊情况:这些话是否有先后顺序,有些话是否可以同时说。在批处理脚本里也一样,有些时候某些命令是不能同时执行的,后面给你说。 

“&”: 

这可以说是最简单的一个组合命令了,它的作用是用来连接n个dos命令,并把这些命令按顺序执行,而不管是否有命令执行失败。例十六:
copy a.txt b.txt /y & del a.txt 

其实这句和move a.txt b.txt的效果是一样的,只不过前者是分了两步来进行的(在后面还将涉及到具体使用哪种方法的问题)。这个命令很简单,就不多费口舌了,唯一需要注意的一点是,这里&两边的命令是有执行顺序的,从前往后执行。 


“&&”: 

切记,这里介绍的几个命令都是组合命令,所以他们前后都必须都有其他命令(要不如何组合?)。这个命令也不例外,它可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。这就为我们自动化完成一些任务提供了方便。例十七: 

dir 文件://1%/www/user.mdb && copy 文件://1%/www/user.mdb e:\backup\www 

如果远程主机存在user.mdb,则copy到本地e:\backup\www,如果不存在当然就不执行copy了。这句对搞网管的朋友是否有点用呢?呵呵。其实它和下面这句的作用是一样的: 

if exist 文件://1%/www/user.mdb copy 文件://1%/www/user.mdb e:\backup\www 

至于你喜欢用哪个就随便了,我没办法判断dir和if两个命令哪一个执行效率更高,所以不知道用哪个更好,呵呵。 

你是否还记得“有些命令是不能同时执行的”?你是否相信这句话?当然得相信,不信就给你出道题:把c盘和d盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个dir,然后把得到的结果>到a.txt里就ok了嘛,看例十八: 

dir c:\ && dir d:\ > a.txt 

仔细研究一下这句执行后的结果,看看是否能达到题目的要求!错了!这样执行后a.txt里只有d盘的信息!为什么?就因为这里&&命令和>命令不能同时出现一个句子里(批处理把一行看成一个句子)!!组合命令&&的优先级没有管道命令>的优先级高(自己总结的,不妥的地方请指正)!所以这句在执行时将本分成这两部分:dir c:\和dir d:\ > a.txt,而并不是如你想的这两部分:dir c:\ && dir d:\和> a.txt。要使用组合命令&&达到题目的要求,必须得这么写: 

dir c:\ > a.txt && dir d:\ >> a.txt 

这样,依据优先级高低,dos将把这句话分成以下两部分:dir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。 

当然这里还可以利用&命令(自己想一下道理哦): 

dir c:\ > a.txt & dir d:\ >> a.txt 

“||”: 

这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。题目:查看当前目录下是否有以s开头的exe文件,如果有则退出。例十九: 

copy code
@echo off 
dir s*.exe || exit 

其实这个例子是有破绽的,你看出来了吗?其实很简单,自己试试就知道了嘛:如果存在那个exe文件,就退出;如果不存在那个exe文件,也退出!为什么?因为如果不存在那个.exe文件,则前一条命令dir s*.exe执行肯定是不成功的,所以就继续执行exit,自然就退出了,呵呵。那么如何解决题目给出的问题呢?看例二十: 


copy code
@echo off 
dir s*.exe || echo didn't exist file s*.exe & pause & exit 

这样执行的结果,就能达到题目的要求,是否存在s*.exe将出现两种结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。 

给出两个更好研究优先级(同时也是更难理解)的脚本,仔细研究它们的区别,以便彻底理解各种命令的优先级顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错!ok,请看例二十一和例二十二。

例二十一: 

@echo off 
dir a.ttt /a & dir a.txt || exit 

例二十二: 

@echo off 
dir a.ttt /a && dir a.txt || exit
4

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网