windows bat(批处理)——基础语法

Windows cmd

一.简单批处理内部命令简介
1.Echo 命令
开辟回显或关闭请求回显作用,或显示消息。如果没有其它参数,echo
命令将突显当前回显设置。
语法
echo [{ on|off }] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把那条命令和重定向符号(也号称管道符号,一般用>
>>
^)结合来兑现输入一些命令到一定格式的文书中.那将在后来的事例中显示出来。

windows bat(批处理)——基础语法

1、@
它的职能是隐匿它背后这一行的命令本人(只可以影响当下行)。
2、echo
华语为“反馈”、“回显”的趣味。它实际是五个开关命令,就是说它唯有二种状态:打开和倒闭。于是就有了echo
on和echo
off多个指令了。间接执行echo命令将体现当前echo命令状态(off或on)执行echo
off将关门回显,它背后的保有命令都不出示命令自身,只呈现执行后的结果。
echo.
:输出空行,即一对一于输入三个回车;值得注意的是命令行中的“.”要紧跟在ECHO前边中间不只怕有空格,否则“.”将被看作提醒新闻输出到显示屏。此外“.”可以用,:;”/[\]+等任一符号替代。

对于跨平台的先后,平时会提供一些实惠的命令行工具,因而shell脚本、bat脚本文件就必需了。互连网上shell的书、小说都游人如织的,所以精通起来会相对不难的多,而windows下的bat网上则少有涉嫌。那里不打算写windows
bat 编程大全,而是不难对bat做二个简便的入门级的学习。

2.@ 命令
代表不显得@前边的吩咐,在入侵进程中(例如使用批处理来格式化仇敌的硬盘)自然不可以让对方看来您采纳的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite…
@format X: /q/u/autoset (format
这么些命令是不得以采取/y那一个参数的,可喜的是微软留了个autoset那些参数给我们,效果和/y是如出一辙的。)

 

3、start 命令
调用外部程序,全部的DOS命令和下令行程序都可以由start命令来调用。
start /wait :
start命令会运营软件的安装程序,而/wait命令会让系统在处理批处理公事中的下一条命令之前等待前3个软件安装到位。使用/wait命令是很主要的,只有那样才不会让批处理文件中的全部命令一下子全部推行起来,那样将会促成同一时半刻间运维七个软件的安装程序。
如:几分钟让您的内存耗尽(例一):
@Echo off
Start
cmd:开启CMD程序)
%0
4、pause
粤语为“暂停”的情致。它的效劳,是让眼下先后进度暂停一下,并展示一行消息:请按任意键继续.
. .。大家得以加 >nul把那几个音信隐藏。
5、:和goto
何以要把那七个指令一道起来介绍?因为它们是分不开的,无论少了哪些或多了哪些都会出错。goto是个跳转命令,:是二个标签。当程序运转到goto时,将电动跳转到:定义的一对去实施了。如:为您的右键添加P处理(例二)
@echo off
echo 输入 1 后按回车键, 添加右键P处理
echo 输入 2 后按回车键, 退出
echo.
set /p start=请采取 (一 、2) 后按回车键:
if “%start%”==”1” goto 1
if “%start%”==”2” goto 2
:1
@echo off
color 1a
reg add HKCR\.bat\ShellNew /v nullfile /f >nul
reg add HKCR\batfile /ve /d P处理 /f >nul
exit
:2
Exit
6、%
本条百分号严俊来说是算不上命令的,它只是批处理中的参数。
%[1-9]代表参数,参数是指在运作批处理文件时在文书名后加的以空格(恐怕Tab)分隔的字符串。变量可以从%0到%9,%0有两个意思
一是表示批处理命令本身,还三个就是无比循环,其余参数字符串用%1到%9顺序表示。
如:
%0表示批处理命令本身
新建二个1.BAT文件。输入以下内容:
@echo off
del
%0
pause
大家看功效,1.BAT一度被删除了。
还1个意味无限循环!如例一。无限执行start cmd 那条命令!
%1、%2……的意思:
例:@echo off
echo %1 %2 %3
echo %1
echo %2
echo %3
进入CMD,输入cd c:\
下一场输入 test.bat 作者是首先个参数
自身是首个参数
本身是第拾个参数
瞩目中间的空格,咱们会看出如此的结果:
自家是率先个参数
自己是第3个参数
自作者是第多个参数
作者是首先个参数
自个儿是第3个参数
本身是第八个参数
比较下代码,%1就是本人是首先个参数 %2就是本身是第①个参数
还有三个%* 
 他是怎样吧?他的功效不是很大,只是再次来到参数而已,可是他是两回回到全体参数的值,不用在输入%1
%2来分明三个个的
例子
@echo off
echo %*
一如既往保留为test.bat 放到C盘
进入CMD,输入cd c:\
然后输入 test.bat 小编是首先个参数
本身是第①个参数
自己是第多个参数
自笔者是第多个参数
可以见见他一回把整个参数都来得出来了
后天说自定义变量
故名思意,自定义变量就是由大家来给他赋予值的变量;要采纳自定义变量就得使用set命令了,看例子.
@echo off
set var=我是值
echo %var%
pause
保留为BAT执行,大家会合到CMD里重回2个   “小编是值”
var为变量名,=号左边的是要给变量的值
那就是最简便的一种设置变量的办法了
如果我们想让用户手工输入变量的值,而不是在代码里内定,可以用用set命令的/p参数
例子:
@echo off
set /p var=请输入变量的值
echo %var%
pause
var变量名 
 =号左侧的是指示语,不是变量的值。变量的值由大家运维后自身用键盘输入!
7、if
if命令是一个表示判断的指令,依照得出的每1个结果,它都可以对应1个对应的操作。

任由在写shell,照旧bat,它们的筹划都遵从这样一条标准:一切都以命令。Windows下命令是深浅写不灵敏的。

3.Goto 命令
钦赐跳转到标签,找到标签后,程序将拍卖从下一行初步的命令。
语法:goto label (label是参数,内定所要转向的批处理程序中的行。)
Sample:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto
noparms(倘诺那里的if、%① 、%2你不清楚的话,先跳过去,后边会有详尽的诠释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字能够不管起,然则最好是有含义的假名啦,字母前加个:用来表示那一个字母是标签,goto命令就是基于这些:来搜寻下一步跳到到那里。最好有一对表明那样您外人看起来才会清楚您的意图啊。

  1. @

(1)、输入判断

 

4.Rem 命令
表明命令,在C语言中一定与/*——–*/,它并不会被实践,只是起二个注明的功用,便于别人阅读和你协调以往修改。
Rem Message
Sample:@Rem Here is the description.

行首有了它的话,这一行的命令就不出示了。

if “参数” == “字符串”  待执行的授命

着力命令(rem, echo, @,/?)

rem:注释 (comment, remarks)。参数可以是其它内容。

echo :它有多少个职能:打印音信、调试开关。假诺参数是on
恐怕off,代表打开、关闭调试,若是前边是其余内容,则参数代表要出口的新闻。为啥就是debug开关呢?假使设置了echo
on,随后履行的其余命令及其实施结果都会输出到正规输出流。

@用来关闭有个别命令的调试音讯,意思是说利用@标注的吩咐不会打出命令本身、执行结果。

/? 查看命令支持

例如:

REM open the cmd echo
@echo on
echo hello, windows cmd 
@echo hello, windows cmd 

REM close the cmd echo
@echo off
echo hello, windows cmd 
@echo hello, windows cmd

 

履行结果: 

D:\Note\windows cmd>REM open the cmd echo

D:\Note\windows cmd>echo hello, windows cmd
hello, windows cmd
hello, windows cmd

D:\Note\windows cmd>REM close the cmd echo
hello, windows cmd
hello, windows cmd

 

对此REM的吩咐,也是会打到STD里,倘使不指望看到,就足以应用@标注。 

 

 

5.Pause 命令

  1. echo

  参数假使等于内定的字符串,则条件建立,运营命令,否则运营下一句。(注意是八个等号)

决定命令(if-else, for-in-do, goto)

 

运行 Pause 命令时,将显得上边的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d://back
echo Please put a new disk into driver A
pause
goto begin
在那么些例子中,驱动器 A
中磁盘上的装有文件均复制到d://back中。突显的申明指示您将另一张磁盘放入驱动器
A 时,pause 命令会使程序挂起,以便你更换磁盘,然后按任意键继续处理。

2.1  echo [{on|off}] [message]

  如if “%1″==”a” format a:
再如例二。

if-else

 

if [noterrorlevel number command [else expression] 基于上一个命令执行的结果进行判定操作

if [notstring1==string2 command [else expression] 判定两个字符串是否相等

if [notexist FileName command [else expression]  判定指定的文件是否存在

If command extensions are enabled, use the following syntax:

if [/istring1 CompareOp string2 command [else expression] 进行字符串比较 (equ, neq, lss, leq, gtr, geq)

if cmdextversion number command [else expression]

if defined variable command [else expression]

 

 

 

6.Call 命令
从多个批处理程序调用另二个批处理程序,并且不鸣金收兵父批处理程序。call
命令接受用作调用目的的标签。尽管在本子或批处理文件外使用
Call,它将不会在指令行起成效。
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label
[arguments]]
参数
[Drive: }[Path] FileName
点名要调用的批处理程序的职分和称号。filename 参数必须怀有 .bat 或 .cmd
扩充名。

输出,回显。

(2)、存在判断。例:
if exist C:\Progra~1\Tencent\AD\*.gif del
C:\Progra~1\Tencent\AD\*.gif
假设存在那二个gif文件,就删除那么些文件。注意,那里的规范判断是判定存在的,当然也得以断定不存在的,例如上边那句“如果不设有那1个gif文件则脱离脚本”:if
not exist C:\Progra~1\Tencent\AD\*.gif
exit。只是多三个not来代表否定而已。
(3)、结果判断。例:
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj
那种用法是先判断前2个限令执行后的重临码(也叫错误码,DOS程序在运维完后都有重回码),倘诺和定义的错误码符合(那里定义的错误码为1),则履行相应的操作(那里相应的操作为pause
& edit %1.asm局地)。
8、call
在批处理脚本中,call命令用来从3个批处理脚本中调用另一个批处理脚本。
9、find
那是壹个追寻命令,用来在文书中查找一定字符串,常常也作为标准判断的映衬程序。这些命令独立选拔的意况在批处理中是相比较少见的,因为没什么实际意义。
下例中,假若不使用type命令列出a.txt中的内容,而是径直拔取find命令在a.txt中找“柒仟”,就亟须得付出这么些a.txt的相对路径,假使没有点名路线,find将追寻键入的要么由另三个命令爆发的文字。那里的“另贰个指令”指的就是type命令了。
@echo off
cd\
netstat -an > a.txt
type a.txt | find “8000” && echo “Congratulations! You have infected
灰鸽子!”
del a.txt
pause & exit

For-in-do

巡回执行,命令语法:

for {%variable | %%variable} in (set) do command [CommandLineOptions]

1)For, in, do 是焦点结构,必不可少;

2){%variable | %%variable} 须求的,变量大小写敏感。

在指令提醒符中执行for时,for中援引变量时,使用%

在批处理文件中履行for时,for中援引变量时,使用%%

除此以外,为了幸免与bat文件的参数 %0到 %9相争辨,所以变量无法是0-9的数字

3)( set ) 要求的。用于指定多少个 files, directories, range of values,
textstrings。括号不只怕省。

 

4)command 需要的,代表要实践的指令。

5)commandLineOptions, 执行command时所需的参数

 

越多用法,大概参考:

 

 

7.start 命令
调用外部程序,全数的DOS命令和下令行程序都足以由start命令来调用。
入侵常用参数:
MIN 开首时窗口最小化
SEPARATE 在暌违的上空内开头 16 位 Windows 程序
HIGH 在 HIGH 优先级档次起始应用程序
REALTIME 在 REALTIME 优先级档次开首应用程序
WAIT 运营应用程序并等待它截至
parameters 那些为传送到命令/程序的参数
推行的应用程序是 32-位 GUI 应用程序时,CMD.EXE
不等应用程序终止就回来命令提醒。固然在指令脚本内执行,该新行为则不会发出。
8.choice 命令
choice
使用此命令可以让用户输入一个字符,从而运营不一样的通令。使用时应该加/c:参数,c:后应写提醒可输入的字符,之间无空格。它的再次来到码为1234……
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的故事情节如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end

2.2 on | off

10、for

goto

语法:goto label

跳转到钦点的label。若是钦点的label不存在,就继续执行下一条命令。假使找到label,就从label处继续执行。若是程序以健康顺序执行到1个label处,而不是透过goto跳转到label,label下的话语依旧以日常顺序执行。

 

图片 1 

 

 

想要驾驭更加多指令参见:

 

 

 

 

 

 

 

:defrag
c://dos//defrag
goto end
:mem
mem
goto end
:end
echo good bye

它实际上是贰个开关命令,就是说它只有三种情形:打开和关闭。于是就有了echo
on和echo off多个指令了。

循环命令,只要条件符合,它将反复执行同样命令。
语法:FOR %%variable IN (set) DO command [command-parameters]
对一组文件中的每二个文件举行有些特定命令。
%%variable 钦点2个纯粹字母可替换的参数。 (set)
钦点3个或一组文件。可以运用通配符。
command
点名对各样文件实施的一声令下。

此文件运维后,将浮现 defrag,mem,end[D,M,E]? 用户可挑选d m e
,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,逐个程序段最后都是goto
end将先后跳到end标号处,然后程序将显示good bye,文件为止。

(1)echo off

command-parameters
为特定命令内定参数或命令行开关。
譬如3个批处理公事中有一行:
for %%c in (*.bat *.txt) do type %%c
则该命令行会显示当前目录下全数以bat和txt为增加名的文书的故事情节。

9.If 命令

只展示执行结果

FOR %%a IN ( C: D: E: F: G: H: ) DO ATTRIB -R -H -S %%a\SXS.EXE & DEL
/F /Q /A -R -H -S %%a\SXS.EXE & ATTRIB -R -H -S %%a\AUTORUN.INF & DEL
/F /Q /A -R -H -S %%a\AUTORUN.INF

if 代表将判断是还是不是符合规定的标准化,从而决定进行不一的下令。 有两种格式:

(2)echo on (默认)

该命令删除根目录下具有SXS.EXE和AUTORUN.INF文件.

① 、if “参数” == “字符串” 待执行的下令
参数借使等于钦点的字符串,则条件建立,运维命令,否则运维下一句。(注意是三个等号)
如if “%1″==”a” format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms

突显执行命令(除echo)和进行结果

 在批处理公事中行使 FO猎豹CS6 命令时,内定变量请使用 %%variable 而不要用
%variable。间接在指令行则只需要两个%号。变量名称是分别轻重缓急写的,所以 %i
差异于 %I

二 、if exist 文件名 待执行的授命
要是有内定的公文,则条件建立,运转命令,否则运维下一句。
如if exist config.sys edit config.sys

(3)> 输出重定向

11、SET

叁 、if errorlevel / if not errorlevel 数字 待执行的一声令下
一旦重返码等于钦赐的数字,则条件建立,运营命令,否则运营下一句。
如if errorlevel 2 goto x2
DOS程序运转时都会再次来到一个数字给DOS,称为错误码errorlevel或称再次来到码,常见的回到码为0、1。

创办或清空文件,然后把数据输出到文件

来得、设置或删除 cmd.exe 环境变量。 

10.for 命令
for 命令是3个比较复杂的通令,主要用以参数在钦命的范围内循环执行命令。
在批处理公事中拔取 FOTiguan 命令时,内定变量请使用 %%variable

echo hi > a.txt

要出示当前环境变量,键入不带参数的 SET。

for { %variable|%%variable } in (set) do command [
CommandLineOptions]
%variable 内定3个纯粹字母可替换的参数。
(set) 钦点3个或一组文件。可以行使通配符。
command 内定对每一个文件进行的一声令下。
command-parameters 为特定命令内定参数或命令行开关。
在批处理公事中行使 FO路虎极光 命令时,钦命变量请使用 %%variable
而毫不用 %variable。变量名称是分别轻重缓急写的,所以 %i 不一致于 %I

把多少追加到文件

/P
命令行开关允许将变量数值设成用户输入的一行输入。读取输入行从前,突显钦定的
promptString。promptString 可以是空的。

若果命令扩张名被启用,下列额外的 FO牧马人 命令格式会境遇
支持:

echo this is a text >>a.txt

/A
命令行开关钦赐等号左边的字符串为被评估的数字表明式。该表明式评估器很不难并以递减的优先权顺序操作。

FOR /D %variable IN (set) DO command [command-parameters]

 

如: set /p start=请选取 (壹 、贰 、3) 后按回车键:

比方集中包涵通配符,则内定与目录名匹配,而不与公事
名匹配。

echo hi > a.txt

if “%start%”==”1” goto 1

FOR /R [[drive:]path] %variable IN (set) DO command [command-

type a.txt

if “%start%”==”2” goto 2

检查以 [drive:]path 为根的目录树,指向各个目录中的
FO君越 语句。若是在 /锐界 后没有点名目录,则运用当前
目录。尽管集仅为一个单点(.)字符,则枚举该目录树。

echo this is a text >>a.txt

if “%start%”==”3” goto 3
管道命令:
1、|
它的听从,就是把前一指令执行的结果传到后一发令去处理。
如:help | more
回车后会发现展现满一屏幕后就自行刹车,等候继续显示任何音讯。当按写回车时,变成三个一个的产出;按下空格键时一显示器一显示屏呈现,直到整个来得完甘休;按任何键自动截止重返DOS。
此地结合了管道命令|和DOS命令more来共同达到目的的。
2、>、>>
那多个指令的法力从实质上来说都以一样的,他们都以出口重定向命令,说的易懂一点,就是把前边命令的出口写入到二个文件中。那多个指令的绝无仅有不相同是,>会去掉掉原有文件中的内容后把新的始末写入原文件,而>>只会另起一行追加新的情节到原文件中,而不会变动其中的原来内容。
3、<
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
例:sort < list.txt > alphlist.txt
sort 命令按字母顺序排列文本文件或指令的出口。在此范例中,sort 命令对
List.txt 文件的行举办排序并显示结果,但不更改文件。并将结果存到
Alphlist.txt 文件中。
构成命令:
顾名思义,就是足以把三个指令组合起来当1个限令来举办。那在批处理脚本里是允许的,而且用的要命常见。它的格式很粗略—-既然以往早就成了3个文件了,那么那五个指令就要用这么些构成命令连接起来放在同一行—-因为批处理认行不认命令数目。
1、&
那足以说是最简单易行的三个重组命令了,它的出力是用来接二连三n个DOS命令,并把这个命令按梯次执行,而不论是是否有指令执行破产。如:copy
a.txt b.txt /y & del a.txt
2、&&
其一命令可以把它左右七个指令组合起来当二个指令来用,与&命令不一致之处在于,它在在此以前以后相继执行被它总是的多少个指令时会自动判断是还是不是有某些命令执行出错,一旦发觉出错后将不继续执行前面剩下的下令。那就为大家自动化达成部分义务提供了造福。(当然这几个和IF命令差不离,可以团结挑选喜好的艺术)
小提醒:有些命令是无法同时推行的
如:出道题:把C盘和D盘的文本和文件夹列出到a.txt文件中。
有人说,同时推行多个dir,然后把拿到的结果>到a.txt里就ok了嘛:
dir c:\ && dir d:\ > a.txt
错了!那样举办后a.txt里唯有D盘的新闻!为何?就因为那边&&命令和>命令不能而且出现2个句子里(批处理把一行看成三个句子)!!组合命令&&的优先级没有管道命令>的先行级高!所以那句在履行时将本分成那两片段:dir
c:\和dir d:\ > a.txt,而并不是如您想的那两局部:dir c:\ && dir
d:\和> a.txt。要动用组合命令&&达到标题标渴求,必须得那般写:
dir c:\ > a.txt && dir d:\ >> a.txt
自然那里还是能动用&命令:dir c:\ > a.txt & dir d:\ >> a.txt
3、||
以此命令的用法和&&差不多千篇一律,但作用恰恰和它反而:利用那种办法在履行多条命令时,当遭受贰个执行科学的吩咐就退出此命令组合,不再继续执行上边的一声令下。
难点:查看当前目录下是或不是有以s开端的exe文件,假若有则脱离。例:
@echo off
dir s*.exe || exit
其实那几个事例是有破烂的,假使存在非凡exe文件,就淡出;若是不存在极度exe文件,也脱离!为啥?因为只要不设有非凡.exe文件,则前一条命令dir
s*.exe执行一定是不成功的,所以就持续执行exit,自然就淡出了。那么哪些消除标题给出的题材啊?看下例:
@echo off
dir s*.exe || echo Didn’t exist file s*.exe & pause & exit
如此那般实践的结果,就能落得标题标须要,是还是不是存在s*.exe将现出三种结果。那里加暂停的趣味,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echo就白写了。
多少个记号:
1、符号(” “)
  ”
“符号允许在字符串中带有空格。进入一个奇特的目录可以用如下方法.例:
c:\>cd “Program Files”
c:\>cd progra~1
c:\>cd pro*
  以上办法都得以进来Program Files目录
2、符号(,)
  ,符号相当于空格。在少数特殊的景观下得以用,来代表空格使用。例:
c:\>dir,c:\
3、符号(;)
  ;符号当命令相同的时候可以将差其余目的用;隔离开来但执行效果不变。如举办进程中生出错误则只回去错误报告但顺序依然会继续执行。例:DI奥迪Q3C:\;D:\;E:\F:\
以上的指令约等于
DIR C:\
DIR D:\
DIR E:\
DIR F:\
4、符号“::”
那一个符号的效率很粗略,它是注释命令,在批处理脚本中和rem命令等效。它背后的情节在实施时不出示,也不起任何意义,因为它只是注释,只是增添了剧本的可读性。与rem
区其他是, ::后的字符行在履行时不会回显,无论是或不是用echo
on打开命令行回显状态。
5、符合“^”
^是对特殊符号”<“,”>”,”&”的指导字符,在指令中他将上述一个记号的奇异功能去掉,仅仅只把她们正是符号而不拔取他们的新鲜意义。
比如echo test ^>1.txt
结果则是他一贯不增添在1.txt里,只是显示了出来

FOR /L %variable IN (start,step,end) DO command [command-para

type a.txt

每一天中午敲醒自个儿的不是闹钟,是夢想!

该集表示以增量方式从初叶到停止的几个数字序列。

 

运用批处理文件

  1. 注释

——常用命令

:: 或 rem

echo、@、call、pause、rem
是批处理公事最常用的多少个指令,大家就从他们开头学起。 echo
表示展现此命令后的字符
echo off 代表在此语句后有所运维的通令都不显得命令行自身
@ 与echo
off相象,但它是加在其余命令行的最前头,表示运维时不出示命令行本身。
call 调用另一条批处理文件(假设直接调用其他批处理公事
,执行完那条文件后将不能推行当前文件延续命令)
pause 运营此句会暂停,突显Press any key to continue…
等待用户按任意键后继续
rem 表示此命令后的字符为表达行,不实施,只是给协调随后寻觅用的

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注