

@echo off
echo "欢迎来到非常BAT!"
pause
SimpleExample
将以上代码保存为bat或cmd格式,双击运行就会在屏幕上显示以下二行话:
欢迎来到非常BAT!
请按任意键继续. . .
常用命令:
1
|
REM 和::
|
REM为注释命令,该命令后的内容不被执行,但能回显。 :: 也可起注释作用, 但有2点: ①任何以:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。 有效标号::后紧跟一个以字母数字开头的字符串,goto语句可以识别。 无效标号::后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可起到注释作用,所以:: 常被用作注释符号,其实:+ 也可起注释作用。 ②与rem 不同, ::后的字符行在执行时不回显, 无论是否用echo on打开命令行回显状态, 因为 命令解释器不认为他是一个有效的命令行; 另外, rem可用于config.sys 文件。 行内注释:%注释内容% (不常用,慎用)
|
2 | ECHO 和@ |
@字符放在命令前将关闭该命令回显,无论echo是否为打开状态。 echo命令的作用: ①打开/关闭回显功能 格式:echo [{ on|off }] 如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。 ②显示当前ECHO设置状态 格式:echo ③输出提示信息 格式:ECHO 信息内容 ④关闭DOS命令提示符 在DOS提示符状态下键入ECHO OFF,能关闭DOS提示符的显示使屏幕只留下光标,直至键入 ECHO ON,提示符才会重新出现。 ⑤输出空行,即相当于输入一个回车 格式:ECHO. (.要紧跟ECHO后中间不能有空格,否则.将被当作提示信息输出。另.可用,:;”/[\]+等任一符号替代) 命令ECHO.输出的回车,经DOS管道转向可作为其它命令的输入,比如echo.|time即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态 ⑥答复命令中的提问 格式:ECHO 答复语|命令文件名 可用于简化一些需人机对话的命令(如:CHKDSK/F;FORMAT Drive:;del *.*)的操作, 它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车: C:>ECHO Y|CHKDSK/F C:>ECHO Y|DEL A :*.* ⑦建立新文件/增加文件内容 格式:ECHO 文件内容>文件名 ECHO 文件内容>>文件名 C:>ECHO @ECHO OFF>AUTOEXEC.BAT建立自动批处理文件 C:>ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT向自动批处理文件中追加内容 C:>TYPE AUTOEXEC.BAT显示该自动批处理文件 ⑧向打印机输出打印内容/打印控制码 格式:ECHO 打印机控制码>PRN ECHO 打印内容>PRN 下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推: C:>ECHO +156+42+116>PRN(输入下划线命令FS*t) C:>ECHO +155@>PRN(输入初始化命令ESC@) C:>ECHO.>PRN(换行) ⑨使喇叭鸣响 ECHO ^G “^G”是在dos窗口中用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其 加入批处理文件中或做成批处理文件调用。
|
3 | PAUSE |
停止系统命令的执行并显示下面的内容。 例:PAUSE 运行显示: 请按任意键继续. . . 要显示其他提示语,可以这样用: Echo 其他提示语 & pause > nul
|
4 | ERRORLEVEL |
程序返回码 echo %errorlevel% 每个命令运行结束,可用这个命令查看返回码,用于判断刚才的命令是否执行成功,默认为0,一般命令执行出错会设errorlevel 为1
|
5 | TITLE |
设置cmd窗口的标题 title 新标题 #可以看到cmd窗口的标题栏变了
|
6 | COLOR |
设置默认的控制台前景和背景颜色。 COLOR [attr] attr指定控制台输出的颜色属性 颜色属性由2个16进制数字指定---第1个为背景,第2个为前景。每个数字可为以下任何值之一: 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 如果没有给定任何参数,该命令会将颜色还原到CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 开关或DefaultColor 注册表值。 如用相同的前景和背景颜色来执行COLOR 命令,COLOR 命令会将ERRORLEVEL 设置为1。 例如: "COLOR fc" 在亮白色上产生亮红色
|
7 | mode |
配置系统设备。 串行口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs] [rts=on|off|hs|tg] [idsr=on|off] 设备状态: MODE [device] [/STATUS] 打印重定向: MODE LPTn[:]=COMm[:] 选定代码页: MODE CON[:] CP SELECT=yyy 代码页状态: MODE CON[:] CP [/STATUS] 显示模式: MODE CON[:] [COLS=c] [LINES=n] 击键率: MODE CON[:] [RATE=r DELAY=d] 例:mode con cols=113 lines=15 & color 9f 此命令设置DOS窗口大小:15行,113列
|
8 | GOTO 和: |
在批处理中允许以“:XXX”构建1个标号,然后用GOTO XXX跳转到:XXX处,然后执行标号后的命令。 例: if {%1}=={} goto noparms if "%2"=="" goto noparms 标签名可随便起,前加个冒号表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到哪儿。 例: @echo off :start set /a var+=1 echo %var% if %var% leq 3 GOTO start pause 运行显示: 1 2 3 4 请按任意键继续. . .
|
9 | FIND |
在文件中搜索字符串。 FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]] /V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I 搜索字符串时忽略大小写。 /OFF[LINE] 不要跳过具有脱机属性集的文件。 "string" 指定要搜索的文字串, [drive:][path]filename 指定要搜索的文件。 如果没有指定路径,FIND 将搜索键入的或由另一命令产生的文字。 Find常和type命令结合使用 Type [drive:][path]filename | find "string" [>tmpfile] #挑选包含string的行 Type [drive:][path]filename | find /v "string" #剔除文件中包含string的行 Type [drive:][path]filename | find /c #显示文件行数 以上用法将去除find命令自带的提示语(文件名提示) 例: @echo off echo 111 >test.txt echo 222 >>test.txt find "111" test.txt del test.txt pause 运行显示如下: ---------- TEST.TXT 111 请按任意键继续. . . 例: @echo off echo 111 >test.txt echo 222 >>test.txt type test.txt|find "111" del test.txt pause 运行显示如下: 111 请按任意键继续. . .
|
10 | START | 批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
例:start explorer d:\ 调用图形界面打开D盘
|
11 | assoc 和ftype | 文件关联 assoc设置'文件扩展名'关联,关联到'文件类型' ftype 设置'文件类型'关联,关联到'执行程序和参数' 当你双击一个.txt文件时,windows并不根据.txt直接判断用notepad.exe 打开,而是先判断.txt属于txtfile '文件类型' ,再调用txtfile 关联的命令行txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1 可以在"文件夹选项"→"文件类型"里修改这2种关联 assoc #显示所有'文件扩展名'关联 assoc .txt #显示.txt代表的'文件类型',结果显示.txt=txtfile assoc .doc #显示.doc代表的'文件类型',结果显示.doc=Word.Document.8 assoc .exe #显示.exe代表的'文件类型',结果显示.exe=exefile ftype #显示所有'文件类型'关联 ftype exefile #显示exefile类型关联的命令行,结果显示exefile="%1" %* assoc .txt=Word.Document.8 #设置.txt为word类型的文档,可以看到.txt文件的图标都变了 assoc .txt=txtfile #恢复.txt的正确关联
|
12 | pushd 和popd | 切换当前目录 @echo off c: & cd\ & md mp3 #在C:\ 建立mp3 文件夹 md d:\mp4 #在D:\ 建立mp4 文件夹 cd /d d:\mp4 #更改当前目录为d:\mp4 pushd c:\mp3 #保存当前目录,并切换当前目录为c:\mp3 popd #恢复当前目录为刚才保存的d:\mp4 一般用处不大,在当前目录名不确定时,会有点帮助(dos编程中很有用) |
13 | CALL | 可在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理 CALL command
调用一条批处理命令,和直接执行效果一样,特殊情况下很有用,比如变量的多级嵌套。 在批处理编程中,可根据一定条件生成命令字符串,用call以执行该字符串。 CALL [drive:][path]filename [batch-parameters] #调用的其它批处理程序。filename 参数必须具有.bat 或.cmd 扩展名 CALL :label arguments #调用本文件内命令段,相当于子程序。被调用命令段以标签:label开头,以命令goto :eof结尾 批脚本里的%* 指出所有的参数(如 %1 %2 %3 %4 %5 ...) 批参数(%n)的替代已被增强。可用以下语法: %~1 - 删除引号("),扩充%1 %~f1 - 将%1 扩充到一个完全合格的路径名 %~d1 - 仅将%1 扩充到一个驱动器号 %~p1 - 仅将%1 扩充到一个路径 %~n1 - 仅将%1 扩充到一个文件名 %~x1 - 仅将%1 扩充到一个文件扩展名 %~s1 - 扩充的路径指含有短名 %~a1 - 将%1 扩充到文件属性 %~t1 - 将%1 扩充到文件的日期/时间 %~z1 - 将%1 扩充到文件的大小 %~$PATH : 1 - 查找列在PATH 环境变量的目录,并将%1扩充到找到的第1个完全合格的名称。如果环境变量名未被定义或没找到文件,此组合键会扩充到空字符串 可组合修定符来取得多重结果: %~dp1 - 只将%1 扩展到驱动器号和路径 %~nx1 - 只将%1 扩展到文件名和扩展名 %~dp$PATH:1 - 在PATH 环境变量中查找%1,并扩展到找到的第1个文件的驱动器号和路径。 %~ftza1 - 将%1 扩展到类似DIR 的输出行。 在上面的例子中,%1 和PATH 可被其他有效数值替换。 %~ 语法被一个有效参数号码终止。%~ 修定符不能跟%*使用 注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展 例: @echo off Echo 产生一个临时文件> tmp.txt Rem 下行先保存当前目录,再将c:\windows设为当前目录 pushd c:\windows Call :sub tmp.txt Rem 下行恢复前次的当前目录 Popd Call :sub tmp.txt pause Del tmp.txt exit :sub Echo 删除引号:%~1 Echo 扩充到路径:%~f1 Echo 扩充到一个驱动器号:%~d1 Echo 扩充到一个路径:%~p1 Echo 扩充到一个文件名:%~n1 Echo 扩充到一个文件扩展名:%~x1 Echo 扩充的路径指含有短名:%~s1 Echo 扩充到文件属性:%~a1 Echo 扩充到文件的日期/时间:%~t1 Echo 扩充到文件的大小:%~z1 Echo 扩展到驱动器号和路径:%~dp1 Echo 扩展到文件名和扩展名:%~nx1 Echo 扩展到类似DIR 的输出行:%~ftza1 Echo. Goto :eof 例: set aa=123456 set cmdstr=echo %aa% call %cmdstr% pause 本例中如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456
|
14 | shift |
更改批处理文件中可替换参数的位置。 SHIFT [/n] 如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第n 个参数开始移位;n 介于0和8之间。例如: SHIFT /2 会将%3 移位到%2,将%4 移位到%3,等等;且不影响%0 和%1
|
15 | IF |
IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command (1) IF [NOT] ERRORLEVEL number command IF ERRORLEVEL这个句子必须放在某个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。 Number的数字取值范围0~255,判断时值的排列顺序应由大到小。返回的值大于等于指定的值时,条件成立 例: @echo off dir c: rem 退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行 IF ERRORLEVEL 1 goto 1 IF ERRORLEVEL 0 goto 0 Rem 上面的两行不可交换位置,否则失败了也显示成功。 :0 echo 命令执行成功! Rem 程序执行完毕跳至标题exit处退出 goto exit :1 echo 命令执行失败! Rem 程序执行完毕跳至标题exit处退出 goto exit :exit pause 运行显示:命令执行成功! (2) IF [NOT] string1==string2 command string1和string2都为字符数据,大小写看作不同,这个条件中的=必须是两个(绝对相等),条件相等后即执行后面的command 检测当前变量的值做出判断,为防止字符串中含有空格,可用以下格式 if [NOT] {string1}=={string2} command if [NOT] [string1]==[string2] command if [NOT] "string1"=="string2" command 这种写法实际上将括号或引号当成字符串一部分,只要等号左右两边一致就行,比如下面的写法就不行: if {string1}==[string2] command (3) IF [NOT] EXIST filename command EXIST filename为文件或目录存在 echo off IF EXIST autoexec.bat echo 文件存在! IF not EXIST autoexec.bat echo 文件不存在! 这个批处理大家可以放在C盘和D盘分别执行,看看效果
|
16 | setlocal与变量延迟 |
@echo off set a=4 set a=5 & echo %a% pause 结果:4 解说:为什么是4而不是5?批处理读取命令时按行读取(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),处理前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。批处理在运行到“set a=5 & echo %a%”前,先把这句整句读取并做预处理——对变量a赋值,那么%a%当然就是4!而为能感知环境变量的动态变化,批处理设计了变量延迟。简单说,在读取一条完整语句后,不立即对该行变量赋值,而会在某个单条语句执行前再进行赋值。如何开启变量延迟? @echo off setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause 结果:5 解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,且变量要用一对叹号“!!”括起来,否则没有效果。 @echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a=%%i echo !a! ) pause 结果: 1 2 3 4 5 解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到预期结果。如果不用变量延迟会出现: ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 即没有感知到for语句中的动态变化。 提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可加以利用。 例:交换两个变量的值,且不用中间变量 @echo off ::目的:交换两个变量的值,但是不使用临时变量 ::Code by JM 2007-1-24 CMD@XP ::出处:http://www.cn-dos.net/forum/viewthread.php?tid=27078 set var1=abc set var2=123 echo 交换前:var1=%var1% var2=%var2% set var1=%var2% & set var2=%var1% echo 交换后:var1=%var1% var2=%var2% pause
|
17 | ATTRIB 显示/更改文件属性 |
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]] + 设置属性 - 清除属性 R 只读文件属性 A 存档文件属性 S 系统文件属性 H 隐藏文件属性 [drive:][path][filename] 指定要处理的文件属性。 /S 处理当前文件夹及其子文件夹中的匹配文件。 /D 也处理文件夹。 例: md autorun attrib +a +s +h autorun 上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性
|