bat

1、@

作用:让执行窗口中不显示它(@)后面这一行的命令本身。即行首有了@,这一行的命令就不显示了

2、echo

反馈、回显。开关命令,有两种状态:打开和关闭

echo :

直接执行echo命令将显示当前echo命令状态(off或on)

bat

echo off:

执行echo off将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行echo on命令;@命令和echo off命令联合起来,达到了两个目的:不显示echo off命令本身,不显示以后各行中的命令本身。

echo on:

打开回显

echo的其他用法:

echo命令的另一种用法一:可以用它来显示信息

echo命令的另一种用法二:可以直接编辑文本文件

bat

 bat

3、:: 、 REM

注释命令,:: 和rem命令等效

它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可读性,和C语言中的/*…………*/类似

 4、pause

暂停

作用:让当前程序进程暂停一下,并显示一行信息:请按任意键继续. . .

bat

 5、:和 goto

: 是一个标签

goto是个跳转命令

当程序运行到goto时,将自动跳转到:定义的部分去执行

goto命令的另一种用法:

提前结束程序。在程序中间使用goto命令跳转到某一标签,而这一标签的内容却定义为退出。 
如: 
…… 
goto end 
…… 
:end 

这里:end在脚本最后一行!其实这个例子很弱智,后面讲了if命令和组合命令你就知道了。

6、%

参数。

例:执行命令 test.bat 23 45

则%0、%1、%2 分别代表 test、 23、 45

7、if

判断

7.1 输入判断

if “%1”==“/?” goto usage

if not “%2”==20 goto tag2

7.2 存在判断

::如果d盘中存在gif文件就删除

if exist D:*.gif del  D:*.gif

::如果不存在那些gif文件则退出脚本

if not exist D:*.gif exit

7.3 结果判断

if errorlevel 1 pause & edit %1.txt 

这种用法是先判断前一个命令执行后的返回码(也叫错误码,DOS程序在运行完后都有返回码)

如果和定义的错误码符合(这里定义的错误码为1),则执行相应的动作(pause & edit %1.txt)

几种运用形式总结:

IF [NOT] ERRORLEVEL number do command 
IF [NOT] string1==string2 do command 
IF [NOT] EXIST filename do command 

8、call

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

注意:可以调用自身

9、find

搜索命令

用来在文件中搜索特定字符串,通常也作为条件的铺垫程序

type test.bat | find "test" && echo "congratulations,you find it !"

bat

10、for 、set 、shift

 for:

要在批处理程序中使用 for 命令,请使用以下语法: 

for %%variable in (set) docommand [command-parameters] 

要在命令提示符下使用 for,请使用以下语法: 

for %variable in (set) do command [command-parameters] 

参数 %variable 或 %%variable

variable 通过命令提示符执行 for 命令。变量名区分大小写。 

(set) 

指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。 

command 

指定要在指定的 set 所包含的每个文件上执行的命令。 

command-parameters 

指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。 

如果启用了命令扩展(Windows 2000 中的默认设置),将支持 for 命令的其他形式。 
For 命令的其他形式 
如果启用了命令扩展,将支持如下 for 命令的其他格式: 

只限于目录 

for /D [%% | %]variable in (set) docommand [command-parameters] 

如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。 

递归 

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters] 

进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则假定为当前目录。如果 
set 只是一个句号 (.) 字符,则只列举目录树。 

迭代 

for /L [%% | %]variable in (start,step,end) do command [command-parameters] 

集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 
4 3 2 1)。 
文件解析 

for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters] 

for /F ["options"] [%% | %]variable in ("literal string") do command[command-parameters] 

for /F ["options"] [%% | %]variable in ('command') do command [command-parameters] 

或者,如果出现 usebackq 选项: 

for /F ["options"] [%% | %]variable in (filenameset) do command [command-parameters] 

for /F ["options"] [%% | %]variable in ('literal string') do command [command-parameters] 

for /F ["options"] [%% | %]variable in (`command`) docommand [command-parameters] 

filenameset 参数指定一个或多个文件名称。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。 

过程由读取文件、分成独立的文本行及然后将每行解析成零个或更多个令牌组成。然后使用设置为找到的一个或多个令牌字符串的变量值(或多个值)集合调用 for 循环体。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。 

跳过空行。通过指定可选的“options”参数可以覆盖默认的解析行为。这是一个引用字符串,它包含一个或多个关键字 
以指定不同的解析选项。关键字是: 

关键字 说明 
eol=c 指定行尾注释字符(只一个字符) 
skip=n 指定在文件的开头跳过的行数。 
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。 
tokens=x,y,m-n 指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。m-n 格式是一个范围,指定从mth 到 nth 的令牌。如果在令牌 = 字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行 
上接收剩余的文本。 
usebackq 指定将右引号字符串作为命令执行,单引号字符串是文字字符串命令,您可以使用双引号包括 filenameset 中的文件名。 

shift:

shift 命令可以让在命令上的命令使用超过10个(%0-%9)以上的可替代参数

每执行一次shift,参数往前移动一个

a.bat 1 2 3 4 5 6 

echo %1

::1

shift

echo %1

::2

shift

echo %1

::3

11、|

就是让前一命令的输出当作后一命令的输入

管道命令,与more结合使用

help | more 

11.1、 help

直接在DOS提示符下输入help命令,结果是让DOS显示其所支持的所有非隐含命令,而在其他地方用help命令,如输入net help回车,则是显示net命令的帮助信息

11.2、 more

比较more a.txt 和 type a.txt

利用more命令,可以达到逐屏或逐行显示输出的效果,而type命令只能一次把输出显示完,最后的结果就是只能看到末尾的部分

12、> 、>>

输出重定向命令,就是把前面一命令的输出写入到一个文件中

> :如果文件已经存在,会清楚掉原来文件中的内容后再写入,如果文件不存在则创建一个新的文件

>>:如果原文件已经存在,不会删除源文件的内容,而是另起一行追加新的内容

13、< 、>& 、<&

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

14、&

组合命令,连接多个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败

copy a.txt b.txt /y & del a.txt 

等价于:move a.txt b.txt

15、&&

组合命令

它可以把它前后两个命令组合起来当一个命令来用,与&命令不同之处在于,它在从前往后依次执行被它连接的几个命令时会自动判断是否有某个命令执行出错,一旦发现出错后将不继续执行后面剩下的命令

16、||

这个命令的用法和&&几乎一样,但作用刚好和它相反:利用这种方法在执行多条命令时,当遇到一个执行正确的命令就退出此命令组合,不再继续执行下面的命令

例:查看当前目录下是否有以s开头的exe文件,如果有则退出

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

研究优先级:

1)

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

2)

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