dos批处理常用命令详解

用文本文档改后缀为.bat就可以新建批处理文件。

批处理命令可以理解成在命令行基础上包装成的逻辑语言

 

批处理命令直接换行就可以,不需要其他程序语言的结束符,如“;”等。

 

批处理命令支持相对路径

 

批处理中用 set parametername=xxx定义变量

用%parametername%引用变量

 

每行批处理命令都会有一个返回状态,用errorlevel表示,0代表顺利执行无异常,1代表有错误

可以用if的结果判断来处理

errorlevel本身就是个内置变量,也可以用%errorlevel%引用

 

常用批处理命令及示例:

 

^  转义字符,比如想输出">"等符号就要用^>,很好理解

 

echo  此命令有两种用法:

一,表示在命令提示窗显示此命令后的字符。不需要用类似字符串的定义加引号等,你写什么就输出什么。echo off 表示在此语句后所有运行的命令都不显示“命令行”本身

比如

echo off
echo echotest
echo echotest2

pause

执行后是

 

二,可以直接修改文件,相当于往目标文件里写入echo的内容

echo ping www.sina.com.cn >a.bat
echo ping
www.tencent.com.cn >>a.bat
echo ping
www.sohu.com.cn >>a.bat
echo pause >>a.bat

 

会在本文件夹下建立新的a.bat文件,其内容为:

ping www.sina.com.cn
ping
www.tencent.com.cn
ping
www.sohu.com.cn
pause

这里用到的>和>>在下面讲述

 

> >>   输出重定向命令,就是把前面命令的输出写入到一个文件中。区别是,>会清除掉原有文件中的内容后把新的内容写入原文件,而>>只会另起一行追加新的内容到原文件中,而不会改动其中的原有内容。前者刷新,后者追加

 

< >&和<& 

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

 

 

比较运算 因为><等用作其他用途,所以不能用于比较运算,批处理用下面的运算符执行判断:

 

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

 

@ 表示不显示@后面的“命令行”,与echo off的作用类似,仅对本行适用

比如echo echotest执行后是

@echo echotest执行后是

区别显而易见

 

call  从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 CALL语句除了可以调用应用程序及批处理文件外,还可以调用P处理文件的标签。

 

pause  运行此句会暂停批处理的执行并在屏幕上显示“Press any key to continue...”或“请按任意键继续。。。”的提示,等待用户按任意键后继续。

 

rem::  表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。

 

:goto  :定义一个标签,类似html中的锚点,而goto就是执行跳转到某指定锚点的意思,:EOF是内置的文件结束锚点

 

这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍)

 

if  表示判断,有三种用法:

一,输入判断

二,存在判断

三,结果判断

 

再详细解释一下

一,输入判断

if "%1"=="" goto usage 
if "%1"=="/?" goto usage 
if "%1"=="help" goto usage 
这里判断输入的参数情况,如果参数为空(无参数),则跳转到usage;如果参数为/?或help时也跳转到usage。这里还可以用否定形式来表示“不等于”,例如:if not "%1"=="" goto usage,则表示如果输入参数不为空就跳转到usage是不是很简单?

 

二,存在判断

if exist C:/Progra~1/Tencent/AD/*.gif del C:/Progra~1/Tencent/AD/*.gif 
如果存在那些gif文件,就删除这些文件。注意,这里的条件判断是判断存在的,当然也可以判断不存在的,例如下面这句“如果不存在那些gif文件则退出脚本”:if not exist C:/Progra~1/Tencent/AD/*.gif exit。只是多一个not来表示否定而已。

 

三,结果判断

masm %1.asm 
if errorlevel 1 pause & edit %1.asm 
link %1.obj
先对源代码进行汇编,如果失败则暂停显示错误信息,并在按任意键后自动进入编辑界面;否则用link程序连接生成的obj文件。这里只介绍一下和if命令有关的地方,&命令后面会讲到。这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码),如果和定义的错误码符合(这里定义的错误码为1),则执行相应的操作(这里相应的操作为pause & edit %1.asm部分)。 
另外,和其他两种用法一样,这种用法也可以表示否定。用否定的形式仍表达上面三句的意思,代码变为: 
masm %1.asm 
if not errorlevel 1 link %1.obj 
pause & edit %1.asm 
看到本质了吧?其实只是把结果判断后所执行的命令互换了一下,“if not errorlevel 1”和“if errorlevel 0”的效果是等效的,都表示上一句masm命令执行成功(因为它是错误判断,而且返回码为0,0就表示否定,就是说这个错误不存在,就是说masm执行成功)。这里是否加not,错误码到底用0还是1,是值得考虑的两个问题,一旦搭配不成功脚本就肯定出错,所以一定要体会的很深刻才行。如何体会的深刻?练习!自己写一个脚本,然后把有not和没有not的情况,返回码为0或1的情况分别写进去执行(怎么,嫌麻烦啊?排列组合算一下才四中情况你就嫌麻烦了?后面介绍管道命令和组合命令时还有更麻烦的呢!怕了?呵呵。),这样从执行的结果中就能很清楚的看出这两种情况的区别。 
这种用errorlevel结果判断的用法是if命令最难的用法,但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码,则要达到相同的效果,必须用else来表示“否则”的操作,是比较麻烦的。以上代码必须变成: 
masm %1.asm 
if exist %1.obj link %1.obj 
else pause & edit %1.asm 

 

把前一命令的输出当后一命令的输入来用的 

 

help  显而易见,显示帮助信息

 

more  逐屏(空格操纵)或逐行(回车操纵)显示输出

 

以上三个命令这样讲解很抽象,用一个例子正好可以组合起来理解

help | more

就这一行命令,看看结果是什么

如果单纯的help,将会一次显示所有cmd非隐藏命令的帮助,一次全部刷新完

而help | more可以让你按行或者按屏依次输出help产生的信息

容易理解吧,help产生的所有输出在|的作用下被传给more作为输入,逐屏逐行就是more命令的效果

 

 

 

call  call命令用来从一个批处理脚本中调用另一个批处理脚本

调用的时候可以被调用文件名后面追加参数,根据参数顺序传入被调用文件的%n参数项

 

 

 

type  显示文本文件的内容   

 

find  用来在文件中搜索特定字符串,通常也作为条件判断的铺垫程序。这个命令单独使用的情况在批处理中是比较少见的,因为没什么实际意义。

     下面用一个例子:

  

执行结果:

 

这里顺带也看到了type命令的效果,类似java中的print,不过是print整个文件

然后我们把type下一行的注释去掉,再次执行,结果:

温习一下|的作用,type的结果(就是那个java文件的内容)被传给find作为参数,find找到了指定的字符串,之后执行echo

 

 

用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败。

 

&&  从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令。

 

||  利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令。

 

for  这可以说是最重要的一个批处理命令:

对一组文件中的每个文件运行指定的命令。

可以在批处理程序中或直接从命令提示符使用 for 命令。

要在批处理程序中使用 for 命令,请使用以下语法:  for %%variable in (set) docommand [command-parameters]

要在命令提示符下使用 for,请使用以下语法:for %variable in (set) do command [command-parameters] 
for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。

(set) 
指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。 
command 
指定要在指定的 set 所包含的每个文件上执行的命令。 
command-parameters 
指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。 

 

最后,简单用一个例子看看批处理命令的应用,作用非常简单,部署一个java应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值