批处理命令.bat文件详解

Windows 1657 0 2013-07-26

批处理命令.bat文件详解
【@】
不显示本行命令(包括路径和命令都不显示,命令执行结果是显示的)

【>和>>】
>的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)
>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加,也可将回显传递给控制台(用法同上)

【&和&&】
&符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。
&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。

【^】
符号^ 是对特殊符号 > 、<、 &等的前导字符。在命令中它将以上的几个符号的特殊功能去掉仅仅只把他们当成普通符号而不使用他们的特殊意义。例:
@echo off
echo test ^> 1.txt
pause
结果为:屏幕上显示“test > 1.txt”

【|】
符号|是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。

【<】
这是重定向输入符,我们可以利用它从文件中读取内容。日后用到再慢慢体会。


【echo】
echo off :不显示之后所有输入的命令(但该命令本身及之后所有命令执行结果是显示的,如不想显示echo off该命令本身前面加@)
echo. echo; echo/和echo\  表示换行
echo 文本:显示文本
echo 文件内容>c:\a.txt:在C:\(路径必须已经存在)下建立a.txt文件
echo 文件内容>>c:\a.txt:增加文件内容

【rem 注释文本】
rem后面的语句是注释语句(给程序员看的,运行时不显示,不过不要和命令语句写在同一行)
::(是两个冒号)和rem作用一样。

【pause】
暂停,显示一条“按下任意键继续……”,等待操作者按任意键后继续执行下一步指令。使用时还可以这样用“pause >nul”,结果就不显示“按任意键继续…”这几个字了。

【title 文本】
cmd窗口标题

【cd .> a.txt】
在当前目录创建a.txt文本文件

【md c:\%date%】
在c:\下创建以当前日期为文件名的目录,md %date%为在当前目录创建以当前日期为文件名的目录

【rd】
用于删除目录(文件夹),例:  rd c:\hero  删除c盘根目录下的hero文件夹,且该文件夹必须是空的。rd命令有两个重要的参数:
    /S      除目录本身外,还将删除指定文件夹下的所有子文件夹和文件(也就是说即使文件夹非空也可以删除了)。
    /Q      安静模式,带 /S 删除目录树时不要求确认

【move】
移动文件或目录并重命名,格式:move [{/y|/-y}] [Source] [target]  /y表示无需确认覆盖。
MOVE命令可以跨分区移动文件,却不可以跨分区移动文件夹。对于跨分区移动文件时,如果目标位置存在和将要移动的文件同名时,系统会提示:“文件存在。” 最后,命令将不会执行。对于隐藏或系统属性的文件,只有把它们的属性去除后,move命令才会执行。
例:move /y d:\test.txt d:\a\ 把d:\test.txt文件移动到d:\a\下
move /y d:\test.txt d:\a\test1.txt   把d:\test.txt文件移动到d:\a\下并重命名为test1.txt
    move /y d:\test d:\a\test1\  把d:\test目录移动到d:\a\ test1\目录下,test1目录须已存在
    move /y d:\test d:\a\test1   把d:\test目录移动到d:\a\下并重命名为test1

【del】
del命令有几个重要的参数:
  /P    删除每一个文件之前提示确认。
  /F    强制删除只读文件。
  /S    从所有子目录删除指定文件。
  /Q    安静模式。删除全局通配符时,不要求确认。
  /A    根据属性选择要删除的文件。
  AttributesR  只读文件S  系统文件
H  隐藏文件A  存档文件
 -  表示“否”的前缀
例如你要删除c盘下所有的hero.txt,且有的hero.txt是只读的,该怎么办呢?
@echo off
del /f /s  c:\hero.txt
pause
注意,因为要搜索整个c盘,所以可能需要等待一段时间。
下面对/A参数多说两句,它的意思是根据属性选择要删除的文件。如果指定多个属性,那么它们之间是“且”的关系。如果只有/A而没指定属性,那么就相当于包括了所有的属性(属性之间是“或”的关系)。例:
@echo off
del /f /s /a c:\hero.txt
pause
删除c盘下所有的hero.txt而不管它的属性。

【dir】
显示目录中的文件和子目录列表。
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/O[[:]sortorder]] [/S] 
  /A  显示具有指定属性的文件。
  attributes   D  目录R  只读文件
       H  隐藏文件    A  准备存档的文件
       S  系统文件    -  表示“否”的前缀
  /B  使用空格式(没有标题信息或摘要)。
  /O  用分类顺序列出文件。
  sortorder    N  按名称(字母顺序)     S  按大小(从小到大)
       E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
       G  组目录优先   -  颠倒顺序的前缀
  /S  显示指定目录和所有子目录中的文件。
dir命令参数较多,在此仅列出几个以供学习使用。
例一、dir /b
只列出当前目录下的文件名和子目录名。(如果没有“/b”参数,将会显示一些额外的信息。)
例二、dir /s
不仅列出当前目录下的文件名和子目录名,还列出子目录中的文件及子目录名。
例三、dir /ah
列出当前目录下隐藏文件的文件名。
例四、dir /os
按照文件的大小顺序显示当前目录下的文件。
下面对/A参数多说两句,它的意思是显示具有指定属性的文件。如果指定多个属性,那么它们之间是“且”的关系。
如果只有/A而没指定属性,那么就相当于包括了所有的属性(属性之间是“或”的关系)。

【用记事本打开一个文件】
例如用记事本打开hosts文件:start notepad C:\WINDOWS\system32\drivers\etc\hosts

【打开一个文件的四种情况:】
①在当前命令提示符窗口内运行批处理,输入call c:/tomcat6/bin/startup.bat即可
②在当前命令提示符窗口显示文件内容,type c:/tomcat6/bin/startup.bat
③在新窗口运行批处理,start c:/tomcat6/bin/startup.bat
④用记事本打开文件,start notepad c:/tomcat6/bin/startup.bat 
call调用另一个批处理时可带上参数:
@echo off
call hero1.bat hero man
pause

其中hero1.bat可以是以下这样:
@echo off
echo 您的名字是%1
echo 您的性别是%2
pause

【reg】
 1) reg add
添加注册表项和值
reg add keyname [/v valuename] [/t 类型] [/d 数据] [/f 表示不提示强行修改]
例: REG ADD HKLM\Software\MyCo /v Data /t REG_BINARY /d fe340ead    表示添加一个值(名称: Data,类型: REG_BINARY,数据: fe340ead)

 2) reg delete
删除注册表项和值
reg delete keyname [/v valuename] [/f]

 3) reg import 
导入注册表文件
reg import *.reg

可以用regedit代替reg import命令。二者用法基本相同,regedit /s 表示寂静
模式,即不用用户确认。

【start】
启动另一个窗口运行指定的程序或命令。一般格式:start "title" 要启动的程序
例:
start "" hero.exe
解说:作用是启动另一个窗口运行hero.exe。双引号""表示的是指定新开的窗口的标题,如果没有这对双引号则程序名“hero.exe”将被当作是新开窗口的标题。

另外需要注意的是要启动程序的路径,如果不再当前目录下请写明完整路径。
/Dpath可以指定起始目录,例:
@echo off
start "" /Dc:\ hero.exe
其效果等同于在c:\下运行hero.exe
/i参数的意思是为新开启的窗口建立一个新环境。如果不加该参数则表示继承原窗口的环境。

【path】
为可执行文件显示或设置一个搜索路径。
PATH [[drive:]path[;...][;%PATH%]
PATH ;
键入 PATH ; 清除所有搜索路径设置并指示 cmd.exe 只在当前目录中搜索。
键入 PATH 但不加参数,显示当前路径。
将 %PATH% 包括在新的路径设置中会将旧路径附加到新设置。

【vol】
用于得到磁盘的卷标和卷序列,例:vol c:

【systeminfo】
systeminfo命令可以得到本机的系统信息。

【more】
more命令用于逐屏显示输出。一般格式:
一、利用重定向输入将文件的内容传递给more命令。
more <filename
二、某个命令的运行结果通过管道符“|”传递给more命令。
some command | more
详细参数请参考more/?

【taskkill】
用于终止进程
taskkill /f   表示强行终止
taskkill /im  进程名  终止制定的进程
taskkill /PID 进程pid 终止的制定PID的进程

例 taskkill /f /im   qq.exe
重启explorer进程:
@echo off
taskkill /f /im explorer.exe
start explorer(前面不加start的话,explorer进程起来以后cmd窗口不会自动关闭)

【tasklist】
列举当前进程。

【date】
显示日期。如果加上“/t”参数则只显示日期,而不用输入新日期。
Echo %date%会显示2011-07-19 星期二
echo %date:~0,10%显示第0位开始的10个字符,即只显示日期不显示星期

【time】
显示时间。如果加上“/t”参数则只显示时间,而不用输入新时间。

【format】
格式化磁盘,具有危险性,测试时一定小心。
例 format d:  格式化d盘,但格式化前会有提示信息。
format /q   快速格式化
format /autoset   不提示,直接格式化
format没有/y参数,但据说可以用如下方法代替:
echo y|format d:

【label】
用于修改磁盘的卷标
例 label c: HERO  将c盘的卷标改成HERO。
注:label命令对subst虚拟的磁盘无效。

【pushd】
pushd命令可以更改当前目录,并将原来的目录压入栈中以供后来的popd命令使用。这就为我们改变当前目录提供了一种新的方法。例如:
@echo off
pushd c:\windows
……
popd
……
pause
首先用pushd命令改变当前目录,然后在需要的时候用popd命令改回来(当然这不是必要的)。

【replace】
用新文件替换目录中的原有文件。
基本格式:replace [drive1:][path1]filename [drive2:][path2]
[drive1:][path1]filename 指定源文件。
[drive2:][path2]指定要替换文件的目录。即覆盖指定目录中的同名文件
列举几个参数
  /P       替换文件或加入源文件之前会先提示您进行确认。
  /R       替换只读文件以及未受保护的文件。
  /W       等您插入磁盘以后再运行。
例:
@echo off
replace c:\hero.txt d:\OK
pause
用c盘根目录下的hero.txt替换d盘ok目录下的所有名为hero.txt的文件。

【subst】
用于将路径虚拟成磁盘,例:
subst X:  c:\hero  将c:\hero虚拟成x盘。
subst X: /d删除虚拟磁盘X。
这个命令有时可以代替虚拟光驱。
注:系统重启后虚拟的磁盘将消失。

【xcopy】
复制文件和目录树,该命令要比copy命令强大。
Xcopy source [destination]  [/S [/E]] [/C] [/H] [/R] 
  source       指定要复制的文件。
  destination  指定新文件的位置和/或名称。
  /S   复制目录和子目录,除了空的。
  /E   复制目录和子目录,包括空的。
  /C   即使有错误,也继续复制。
  /H   也复制隐藏和系统文件。
  /R   覆盖只读文件。
xcopy命令参数较多,在此仅列出几个以供学习使用。例:
xcopy /e hero\* d:\hh\
将hero文件夹下的所有文件及文件夹复制到d:\hh\下

【color】
用于改变批处理背景和字体颜色,前底后字
0 = 黑色 8 = 灰色 
1 = 蓝色 9 = 淡蓝色 
2 = 绿色 A = 淡绿色 
3 = 湖蓝 B = 淡浅绿色 
4 = 红色 C = 淡红色 
5 = 紫色 D = 淡紫色 
6 = 黄色 E = 淡黄色 
7 = 白色 F = 亮白色 
如:color e0   表示背景色变为淡黄色,字的颜色变为黑色。

【mode】
mode con lines= ?    cols= ?
调整批处理窗口大小。lines代表行数,cols代表列数。

【find】
在文件中搜索字符串。
FIND "指定要搜索的文字串" 指定要搜索的文件,例:
@echo off
find "hero" hero.txt >nul
if errorlevel 1 echo 没找到!
if errorlevel 0 echo 找到了!
pause
在hero.txt中搜索字符串hero,若文件中没有字符串“hero”则显示“没找到!”,若有则显示“找到了!”。

【msg】
将消息发送给用户。
MSG {username} [/TIME:seconds] [message]
  username    标识指定的用户名。
  /TIME:seconds       等待接收器确认消息的时间延迟。
  Messag     要发送的消息。如果没有指定,发出提示,或者从 stdin 读取。
例:
@echo off
msg %username% /time:5  测试中……
pause
结果:弹出消息框。如果用户没有进行操作的话,该消息框将在5秒后关闭。句中的%username%代表当前系统用户的用户名。
一般可以这样用msg * message

【netsh】
显示TCP/IP设置
netsh interface ip show config

配置IP地址
netsh interface ip set address name=“本地连接" static 192.168.0.100 255.255.255.0 192.168.0.1 1

输出当前的ip设置
netsh -c interface dump > c:\location1.txt

输入ip设置
netsh -f c:\location1.txt
或者是  netsh exec c:\location2.txt

自动获得IP地址和DNS地址
netsh interface ip set address “本地连接” dhcp
netsh interface ip set dns “本地连接” dhcp

配置 DNS and WINS addresses 
netsh interface ip set dns “本地连接" static 192.168.0.200
netsh interface ip set wins “本地连接" static 192.168.0.200

【regsvr32】
注册组件
/u  解除注册
/s  无声,不显示消息框
例:regsvr32 /s hero.dll

【at】
at 11:00/interactive "c:\hero\hero.exe"
表示在11:00运行c:\hero\hero.exe,其中interactive是参数,表示允许作业在运行时与当时登录的用户桌面进行交互。

【shutdown】
用法: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "comment"] [-d up:xx:yy]
没有参数显示此消息(与 ? 相同)
-i      显示 GUI 界面,必须是第一个选项
-l      注销(不能与选项 -m 一起使用)
-s      关闭此计算机
-r      关闭并重启动此计算机
-a      放弃系统关机
-m \\computername       远程计算机关机/重启动/放弃
-t xx   设置关闭的超时为 xx 秒
-c "comment"    关闭注释(最大 127 个字符)
-f      强制运行的应用程序关闭而没有警告
-d [u][p]:xx:yy   关闭原因代码
u  是用户代码
p  是一个计划的关闭代码
xx 是一个主要原因代码(小于 256 的正整数)
yy 是一个次要原因代码(小于 65536 的正整数)
例如:
@echo
at 23:00 shutdown -s -t 300 -c “系统将在300秒后关机”
运行该命令后系统将在23点弹出关机对话款并显示“系统将在300秒后关机”

【数值运算】
批处理在数值运算上是非常弱的!(甚至不支持浮点运算及平方和开方)不过依然可以用它来进行一些简单运算。基本格式如下:
set /a 变量名=运算表达式 注意/a是不可省参数。
加法运算:set /a a=5+2
乘法运算:set /a a=55*34但set /a a=55.1*34是错误的,因为批处理不支持浮点运算
除法运算:set /a a=55/34其结果是a=1,也就是说除法是向下取整的。
模 运 算:set /a a=55%%34结果是a=21,55除以34的余数。
set /a var+=1变量var在原值上+1

【set】
一、set  对变量赋值,例:
@echo off
set a=英雄
echo 我的名字叫%a%
pause
运行后显示——我的名字叫英雄
注意,要想取出var1的值必须用%%将var1括起来,例如set var2=%var1%

二、set /p 不是单纯的赋值,而是提示输入,并将输入的内容赋给变量,例:
@echo off
set /p  year=请输入您的出生年
echo 您是在%year%年出生的
pause

三、set /a  对变量赋的是一个数学表达式的值(该表达式中也可以含有变量),例:
@echo off
set /a  num=2*5+(5+3000+234+34)*3
echo 答案是%num%
pause
在表达式中的任何非数字字符串都会被认为是环境变量,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。这就是说在进行算术运算时,即使需要延迟也可以不用。例:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,10) do (
set var=%%i
set /a  num=2*var
echo 答案是!num!
)
pause

四、set   单独使用set可显示环境变量。
如“set p”表示列出当前所有以p开头的环境变量。


【shift】
下例说明shift的作用:比如我老爸有10个儿子,我英雄是第10个。
第一步:
我们现在用一个另类的办法输出10个儿子的名字,将如下代码保存为hero.bat。
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
pause
如何运行呢?我们可以另写一个bat,内容是:call hero.bat 老大 老二 老三 …… 英雄
也就是调用hero.bat并共带10个参数!能正确运行吗?不能,很遗憾,因为根本没有%10,碰到echo %10时会输出“英雄0”,也就是%1的值和0

第二步:
在上一步中没有输出我英雄的大名,那难道我英雄就不是我老爸的儿子吗!我得想个办法把我的名字也输出来。
好了,借助shift命令就可以达到。我们把hero.bat中的代码改一下。
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
shift
echo %9
pause
终于我的大名输出了。可是英雄明明是第10个参数呀,怎么现在变成第9个了?
这个就是shift的功能.

也就是,执行shift命令以后,原来的%9变成了%8,原来的%8变成了%7,原来的%7变成了%6……而原来的%1变成了%0,此时原来的%0没了。
也就是说后面的参数依次冲掉了前面的参数,而为了输出我的名字,最终牺牲了%0。

第三步:
我老爸又认了1个干儿子,名字为a
到此,我老爸有多了1个干儿子。共11个儿子。
在调用hero.bat时又多了1个参数,则运行hero.bat时有:call hero.bat 老大 老二 老三 …… 英雄 a
此时,hero.bat的代码如下:(最容易理解的方法)
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
shift
echo %9
::现在的%9是英雄
shift
echo %9
::现在的%9是a
pause

【子过程】
其实不是真正意义上的子过程,只是在形式上有点类似。例:
@echo off
echo  调用前
pause

call :sub
::调用子过程

echo 调用后
pause
exit

:sub
echo 子过程调用中
pause
goto :eof
结果:
调用前
子过程调用中
调用后

解说:程序首先执行到“echo  调用前”显示“调用前”;然后调用子过程sub,程序直接跳到标签sub后面去执行“echo 子过程调用中”显示“子过程调用中”;程序继续向下走,遇到“goto :eof”,则跳回"call :sub"的下一行继续执行“echo 调用后”。子过程是可以带参数的。

 

【跳转命令】
基本格式:
    goto loop     //跳转到标签loop,没有冒号。
    ……
    :loop //标签loop,冒号不能省。
例:
@echo off
set /p a=请输入(Y/N)
if %a% equ Y goto Y
::如果输入的是Y则跳转到标签Y。
if %a% equ N goto N
::如果输入的是N则跳转到标签N。
goto error
::如果输入的既不是Y也不是N则跳转到标签error。

:Y
echo Y!
pause
exit

:N
echo N!
pause
exit

:error
echo Error!
Pause

【if条件语句】
一、if的常规用法。
1、IF [NOT] ERRORLEVEL number do something
ERRORLEVEL number是错误码也称返回码。最后运行的程序会返回一个错误码(返回码),如果它等于或大于指定数字number,则指定条件为 true。例:
@echo off
set var=9
if errorlevel 1 goto a
if errorlevel 0 goto b
goto end
:a
echo a
pause
exit
:b
echo b
pause
exit
:end
pause
解说:由于“set var=9”会执行成功,所以返回码为0,程序会跳到标签b处而不是a。

2、IF [NOT] string1==string2 do something
如果指定的文字字符串匹配,指定条件为 true。例:
@echo off
if "hero" == "hero" echo 这是必然的!
pause

当然,也可以用于字符串变量的比较,如下:
@echo off
set str1=hero
set str2=hero
if %str1% == %str2% echo 这是必然的!
pause

3、IF [NOT] EXIST filename do something
如果指定的文件名存在,指定条件为 true。例:
@echo off
if exist hero.exe echo 当前目录下存在文件hero.exe
pause 
解说:如果当前文件夹下存在hero.exe则显示“当前目录下存在文件hero.exe
”,否则不显示。
以上各句中的[NOT]是可选项,表示只有条件为 false 的情况下,才应该执行该命令。(相信各位已经明白,这里不再复述)

二、if-else语句
ELSE 子句必须在 IF 之后出现在同一行上。例
IF EXIST hero.txt (
del hero.txt
) ELSE (
echo hero.txt missing.
)
解说:如果存在文件hero.txt则删除,否则显示“hero.txt missing.”。本程序段的这种写法是ELSE 子句在 IF 之后出现在同一行上的特殊形式,它是通过括号“(”和“)”相连接的。
由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句不会有效:
IF EXIST hero.txt del hero.txt
ELSE echo hero.txt missing
因为 del 命令需要用一个新行终止,以下子句不会有效:
IF EXIST hero.txt del hero.txt ELSE echo hero.txt missing
需要用括号括上。
IF EXIST hero.txt (del hero.txt) ELSE echo hero.txt missing

三、if的嵌套用法
例: 
@echo off
set var=99
if %var% gtr 10 if %var% lss 100 echo 这个数是两位数!
pause
解说:首先要注意“%var%”,若要取出变量的值要用%%将变量括起来。其次运算符gtr代表大于,lss代表小于,类似的运算符还有:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

注意:批处理if语句中没有“>”,“<”,“>=”,“<=”,“!=”,“<>”等表示大
小关系的符号。

【for循环】
基本格式:
for /l %%i in (1,1,10) do (
    do something
)
其中"/l"是计次循环中的必选参数,%%i是循环变量,它在后面的集(1,1,10)中取值,具体是(初值,增量,终值)。本例中%%i分别取1到10,其中增量为1。do something是你要添加的代码。注意:请注意括号“(”的位置。
举个例子:
@echo off
for %%i in (a b c d e f g h i ) do (
echo %%i
)
pause
结果输出a到i

【IF-GOTO循环】
批处理中没有DO-WHILE这一类的循环,但我们可以使用IF-GOTO的组合来代替, 例:
@echo off
set var=0
::为变量var赋初值。
:A
::A是标签
set /a var+=1
if %var% lss 999 goto A
echo 共循环了%var%次。
pause
结果:共循环了999次。
解说:无论满不满足条件都会先运行一次。

上一篇:启动停止重启IIS的BAT命令

下一篇:运行批处理文件.bat用记事本打开hosts文件

讨论数量:0

请先登录再发表讨论。 2024-04-20

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链