赞
踩
首先解决第一个问题,什么是BAT脚本?
echo 命令
功能: 打开回显或关闭请求回显功能,或显示消息
语法: echo [{on|off}] [message]
echo on 表示在此语句后所有运行的命令都显示命令行本身
echo off 表示在此语句后所有运行的命令都不显示命令行本身
此两句的作用就是,我们可以选择是否将命令打印到终端上面。
@与echo off相像,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
@ 命令
功能: 表示不显示@后面的命令
语法:@{命令}
很多黑客程序在入侵过程中, (例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦 。
example:
@echo off
echo hello world
如此,整个BAT脚本的命令不会在终端显示,但是会在终端打印 "hello world"
rem 命令和::命令
功能:表示此命令后的字符为注释,不执行。
语法:放在你想要的注释的命令开头即可
这两条条指令类似于C语言中的注释符"//",留给自己和他人参考使用,写注释等。
example:
@rem there is a warning!!
::there is a warning!!
pause 指令
功能:使程序挂起并且输出" Press any key to continue . . . "/如果才中问环境下会提示“请按任意键继续…”
语法:单独使用,放在你想要使程序挂起的地方
example:
@echo off
:begin
echo I am a iron man
pause
goto begin
这个例子使用到了类似于C语言中的goto语句的规则。如果你了解该语句可以看出这个脚本是一个死循环,像不像木马程序?
goto 命令
功能:跳转到指定标签,找到标签后程序将从下一行开始执行指令。
语法: goto {label }(label是参数,指定所要跳转的位置) ,一般标签前会加":"表示该字母是一个标签,如 “:lable”。
这里不给出例子了,可以参考上一个例子。
call 命令
功能:在一个批处理程序中调用另一个批处理程序,并且不终止父批处理程序。call 命令接收用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
语法: call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
[Drive:][Path] FileName : 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名,即只能调用批处理程序。
start 命令
功能: 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用
语法:start [Path] FileName
如:start C:\user\test.exe
前面提到call命令只能调用另一个BAT脚本程序,而start则可以调用任何可执行程序。
choice 命令
功能: choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,二者之间无空格。它的返回码为1234……
语法: choice /lable:abc [tag1],[tag2],[tag3]
choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法
参数列表:
/C choices 指定要创建的选项列表。默认列表是 “YN”。
/N 在提示符中隐藏选项列表。提示前面的消息得到显示,
选项依旧处于启用状态。
/CS 允许选择分大小写的选项。在默认情况下,这个工具
是不分大小写的。
/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0
到 9999。如果指定了 0,就不会有暂停,默认选项
会得到选择。
/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选
项指定的一组选择中; 同时,必须用 /T 指定 nnnn。
/M text 指定提示之前要显示的消息。如果没有指定,工具只
显示提示。
/? 显示帮助消息。
注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列。
example:
@echo off choice /C dme /M "defrag,mem,end" if errorlevel 3 goto end if errorlevel 2 goto mem if errotlevel 1 goto defrag :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye
此批处理运行后,将显示“defrag,mem,end[D,M,E]?” ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。
if 命令
功能: 表示将判断是否符合规定的条件,从而决定执行不同的命令
语法:其语法有以下三种形式
if “参数” == “字符串” 待执行的命令
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。
例:if “%1”==“a” format a:
if [not] exist [路径]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,则显示它的内容。此处type指令用于显示指定文件的内容。
if errorlevel <数字> 待执行的命令
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
其实这个更像一个出错处理机制,我们应在自己编写BAT脚本中多多使用这一形式。
常和if搭配的几个运算符:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
for 命令
功能: for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
语法: FOR (%%variable|%variable) IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数,指定变量请用%%variable。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
例如一个批处理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。
set 命令
语法:set [varible=[string]]
功能:显示、设置或删除环境变量
example:
set VAR=before
if "%VAR"=="before"(
set VAR==after
if "!VAR"=="after"@echo if you see this it work
)
通过上面常用的10来个指令的介绍,我们在看大部分的BAT脚本的时候已经没有啥太大的压力了。但是要想更好的掌握BAT脚本,还有以下几点补充:
同Linux中shell脚本一样,BAT脚本也可以使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。
example:
@echo off
type %1
将该脚本命名为type.bat,放在C盘的根目录下,那么当我们执行如下指令:C:>type a.txt
%1就表示a.txt , %0就表示type本身。该指令就表示显示a.txt的内容。
将上面的例子修改一下:
@echo off
type %1
format %2
运行指令:C:>type a.txt D:\test
上面这条例子,根据前面讲到的东西我们很容易就可以看出它的含义。
&
用法: 第一条命令 & 第二条命令 [& 第三条命令…]
描述: 用这种方法可以同时执行多条命令,而不管命令是否执行成功 ,都继续往下继续执行,这个要和&&进行区分。
&&
用法: 第一条命令 && 第二条命令 [&& 第三条命令…]
描述: 用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
example:
@format a.txt && type b.txt
||
用法: 第一条命令 || 第二条命令 [|| 第三条命令…]
描述: 用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
这个方法就像我们在测试设备能否识别我们的某个指令,为了保险起见我们设置了多个指令,以确保我们的指令总有一个能被设备执行。
| 命令
用法: 第一条命令 | 第二条命令 [| 第三条命令…]
描述:将第一条命令的结果作为第二条命令的参数来使用
>、>>输出重定向命令
描述: 将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
管道命令在我们实际使用中很有用的,大家可慢慢体会。
example:
@echo off
@echo hello > c:hello.txt
@echo hello > c:welcome.txt
@echo welcome >> c:welcome.txt
此时我们会发现在hello.txt中,只有hello这一字符串,没有其他的内容,因为其他的内容都被清空了。
在welcome.txt中,发现除了hello还有welcome。如此可体会一下二者的区别。
<、>&、<&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
这几个还是很好理解的,可以写几个例子体会一下。
句柄 | 句柄的数字代号 | 描述 |
---|---|---|
STDIN | 0 | 键盘输入 |
STDOUT | 1 | 输出到命令提示符窗口 |
STDERR | 2 | 错误输出到命令提示符窗口 |
UNDEFINED | 3-9 | 句柄由应用程序单独定义,它们是各个工具特有的 |
设置字体颜色和窗体大小
设置字体颜色:COLOR 02 (0代表背景色,2代表前景色)
常用的颜色请见下表:
字号 | 颜色 |
---|---|
0 | 黑色 |
1 | 蓝色 |
2 | 绿色 |
3 | 浅绿色 |
4 | 红色 |
5 | 紫色 |
6 | 黄色 |
7 | 白色 |
8 | 灰色 |
9 | 浅蓝色 |
A | 潜绿色 |
B | 浅蓝色 |
C | 浅红色 |
D | 浅紫色 |
E | 浅黄色 |
F | 亮白色 |
设置窗体大小:MODE CON: COLS=宽度 LINES=高度
划重点
经过前面的常用命令的介绍,你肯定还是会遇到一些没有见过的命令,没关系送你三招保命的技巧,当你遇到不认识的指令时可使用如下三板斧:
[command] help
就会显示该指令的详细信息,使用信息还用例子,当然比我这里讲的要好上很多,还不会出错。这个help就相当于Linux中的man命令。举个例子:set help
[command] /?
结合前面讲到的知识,我们可以推出此方法。将想要得到的命令的显示到当前窗口。
help
这个指令会显示DOS下常见的指令,如果不懂其用法,可以使用上面两个指令进行查看。可以去自己的命令行敲下该指令看看,下面截了个图:
好啦,暂时就只有这么多了,如果后面发现还有遗漏的会再将其补充进来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。