BAT常用指令解析命令功能
BAT脚本入门一、概述
首先解决第一个问题,哪些是BAT脚本?
二、BAT脚本常用指令解析
echo命令
功能:打开回显或关掉恳求回显功能,或显示消息
句型:echo[{on|off}][message]
echoon表示在此句子后所有运行的命令都显示命令行本身
echooff表示在此句子后所有运行的命令都不显示命令行本身
此两句的作用就是,我们可以选择是否将命令复印到终端里面。
@与echooff相似,但它是加在每位命令行的最上面,表示运行时不显示这一行的命令行(只能影响当前行)。
@命令
功能:表示不显示@旁边的命令
句型:@{命令}
好多黑客程序在入侵过程中,(比如使用批处理来低格敌方的硬碟)自然不能让对方听到你使用的命令啦。
example:
@echo off echo hello world
如此,整个BAT脚本的命令不会在终端显示,但是会在终端打印 "hello world"
rem命令和::命令
功能:表示此命令后的字符为注释,不执行。
句型:置于你想要的注释的命令开头即可
这两条条指令类似于C语言中的注释符”//”,留给自己和他灵芝考使用,写注释等。
example:
@rem there is a warning!! ::there is a warning!!
pause指令
功能:使程序挂起而且输出”Pressanykeytocontinue…”/假如才中问环境下会提示“请按任意键继续…”
句型:单独使用,置于你想要使程序挂起的地方
example:
@echo off :begin echo I am a iron man pause goto begin
这个反例使用到了类似于C语言中的goto句子的规则。假如你了解该句子可以看出这个脚本是一个死循环,像不像木马程序?
goto命令
功能:跳转到指定标签,找到标签后程序将从下一行开始执行指令。
句型:goto{label}(label是参数linux命令大全,指定所要跳转的位置),通常标签前会加”:”表示该字母是一个标签,如“:lable”。
这儿不给出反例了,可以参考上一个反例。
call命令
功能:在一个批处理程序中调用另一个批处理程序,但是不中止父批处理程序。call命令接收用作调用目标的标签。假如在脚本或批处理文件外使用Call,它将不会在命令行起作用。
句型:call[Drive:][Path]FileName[BatchParameters][:label[arguments]
[Drive:][Path]FileName:指定要调用的批处理程序的位置和名称。filename参数必须具有.bat或.cmd扩充名,即只能调用批处理程序。
start命令
功能:调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用
句型:start[Path]FileName
如:startC:usertest.exe
后面提及call命令只能调用另一个BAT脚本程序,而start则可以调用任何可执行程序。
choice命令
功能:choice使用此命令可以让用户输入一个字符,因而运行不同的命令。使用时应当加/c:参数,c:后应写提示可输入的字符,两者之间无空格。它的返回码为1234……
句型:choice/lable:abc[tag1],[tag2],[tag3]
choice命令为DOS或则Windows系统提供的外部命令,不同版本的choice命令句型会稍有不同,请用choice/?查看用法
参数列表:
/Cchoices指定要创建的选项列表。默认列表是“YN”。
/N在提示符中隐藏选项列表。提示上面的消息得到显示,
选项仍然处于启用状态。
/CS容许选择分大小写的选项。在默认情况下,这个工具
是不分大小写的。
/Ttimeout作出默认选择之前bat 命令 参数,暂停的秒数。可接受的值是从0
到9999。假如指定了0,就不会有暂停,默认选项
会得到选择。
/Dchoice在nnnn秒以后指定默认选项。字符必须在用/C选
项指定的一组选择中;同时,必须用/T指定nnnn。
/Mtext指定提示之前要显示的消息。假如没有指定,工具只
显示提示。
/?显示帮助消息。
注意:
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:dosdefrag goto end:mem mem goto end:end echo good bye
此批处理运行后,将显示“defrag,mem,end[D,M,E]?”,用户可选择dme,之后if句子按照用户的选择做出判定,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每位程序段最后都以gotoend将程序跳到end标号处,之后程序将显示goodbye,批处理运行结束。
if命令
功能:表示将判定是否符合规定的条件,因而决定执行不同的命令
句型:其句型有以下三种方式
if“参数”==“字符串”待执行的命令
参数假如等于(not表示不等,下同)指定的字符串,则条件创立,运行命令,否则运行下一句。
例:if“%1”==“a”formata:
if[not]exist[路径]文件名待执行的命令
假如有指定的文件,则条件创立,运行命令,否则运行下一句。
如:ifexistc:config.systypec:config.sys
表示假如存在c:config.sys文件,则显示它的内容。此处type指令用于显示指定文件的内容。
iferrorlevel待执行的命令
好多DOS程序在运行结束后会返回一个数字值拿来表示程序运行的结果(或则状态),通过iferrorlevel命令可以判定程序的返回值,依据不同的返回值来决定执行不同的命令(返回值必须根据从大到小的次序排列)。假如返回值等于指定的数字,则条件创立,运行命令,否则运行下一句。
如iferrorlevel2gotox2
虽然这个更像一个出错处理机制,我们应在自己编撰BAT脚本中多多使用这一方式。
常和if搭配的几个运算符:
EQU-等于
NEQ-不等于
LSS-大于
LEQ-大于或等于
GTR-小于
GEQ-小于或等于
for命令
功能:for命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
句型:FOR(%%variable|%variable)IN(set)DOcommand[command-parameters]
%variable指定一个单一字母可替换的参数,指定变量请用%%variable。
(set)指定一个或一组文件。可以使用转义。
command指定对每位文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
比如一个批处理文件中有一行:
for%%cin(*.bat*.txt)dotype%%c
则该命令行会显示当前目录下所有以bat和txt为扩充名的文件的内容。
set命令
句型:set[varible=[string]]
功能:显示、设置或删掉环境变量
example:
set VAR=before if "%VAR"=="before"(set VAR==afterif "!VAR"=="after"@echo if you see this it work )
通过前面常用的10来个指令的介绍,我们在看大部份的BAT脚本的时侯早已没有啥太大的压力了。并且要想更好的把握BAT脚本,还有以下几点补充:
三、BAT批处理文件参数
@echo off type %1
@echo offtype ormat %2
四、使用组合命令
用法:第一条命令&第二条命令[&第三条命令…]
描述:用这些方式可以同时执行多条命令,而不管命令是否执行成功,都继续往下继续执行,这个要和&&进行分辨。
&&
用法:第一条命令&&第二条命令[&&第三条命令…]
描述:用这些方式可以同时执行多条命令bat 命令 参数,当遇到执行出错的命令后将不执行前面的命令,假如仍然没有出错则仍然执行完所有命令
example:
@format a.txt && type b.txt
||
用法:第一条命令||第二条命令[||第三条命令…]
描述:用这些方式可以同时执行多条命令,当遇到执行正确的命令后将不执行前面的命令,假如没有出现正确的命令则仍然执行完所有命令;
这个方式如同我们在测试设备能够辨识我们的某个指令,为了保险起见我们设置了多个指令,以确保我们的指令总有一个能被设备执行。
五、管道命令
|命令
用法:第一条命令|第二条命令[|第三条命令…]
描述:将第一条命令的结果作为第二条命令的参数来使用
>、>>输出重定向命令
描述:将一条命令或某个程序输出结果的重定向到特定文件中,>与>>的区别在于小型linux系统,>会消除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
管线命令在我们实际使用中很有用的,你们可渐渐感受。
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。这么可感受一下两者的区别。
&、&将一个句柄的输出写入到另一个句柄的输入中。