介绍
批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令。 可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。
常见指令
- echo、@、call、pause、rem(
::
):最常用的几个命令- echo 表示显示此命令后的字符
- echo off 表示在此语句后所有运行的命令都不显示命令行本身
- @ 与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
- call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
- pause 运行此句会暂停批处理的执行,等待用户按任意键后继续
- rem 表示此命令后的字符为注释。
@echo off
echo "hello world"
参数
- 批处理文件的参数 (%)
- %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串
- 变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示
::hello.bat
@echo off
echo "hello" %1
#命令行执行
hello.bat abc
- 参数也可以为一个文件,如“hello.txt”
特殊指令
if goto choice for是批处理文件中比较高级的命令。
if
if [not] "参数" == "字符串" 待执行的命令
if [not] exist [路径\]文件名 待执行的命令
if exist c:\hello.txt type c:\hello.txt
errorlevel
if errorlevel <数字> 待执行的命令
#goto使用和汇编相同,goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处
if errorlevel 0 goto end
echo "pass"
:end
echo this is the end
choice
#choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel
#if errorlevel配合,根据用户的选择运行不同的命令
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
#可在cmd中使用 choice /? 查看帮助
@echo off
choice /C 123 /M "s1,s2,s3"
if errorlevel 3 goto s1
if errorlevel 2 goto s2
if errorlevel 1 goto s3
:s1
echo "1"
goto end
:s2
echo "2"
goto end
:s3
echo "3"
:end
- /c 选择选项,/m显示的文本
for
#for 循环命令,只要条件符合,它将多次执行同一命令
FOR %%variable IN (set) DO command [command-parameters]
# %%variable 指定一个单一字母可替换的参数。
# (set) 指定一个或一组文件。可以使用通配符。
# command 指定对每个文件执行的命令。
# command-parameters 为特定命令指定参数或命令行开关。
for %%c in (*.word *.txt) do type %%c
#则该命令行会显示当前目录下所有以word和txt为扩展名的文件的内容
exist
if exist [[路径]file] echo "exist"
if not exist [[路径]file] echo "not exist"
if exist [%1] echo %1
...
xcopy
@ECHO OFF
XCOPY C:\hello.txt D: IF ERRORLEVEL 1 ECHO "fail to copy"
IF ERRORLEVEL 0 ECHO "success to copy"
errorlevel不同指令的含义
不同指令的errorlevel含义
xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
3 预置错误阻止文件拷贝操作
4 拷贝过程中写盘错误
backup
0 备份成功
1 未找到备份文件
2 文件共享冲突阻止备份完成
3 用户用ctrl-c中止备份
4 由于致命的错误使备份操作中止
diskcomp
0 盘比较相同
1 盘比较不同
2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止
4 预置错误中止比较
diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作
format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示"proceed with format(y/n)?"下用户键入n结束
==
if %1==3 echo "yes"
goto
if %1==3 goto end
echo qaq
:end
#标号前是ASCII字符的冒号":",冒号与标号之间不能有空格
for
#显示所有格式为word和txt文件的内容
@ECHO OFF
FOR %%C IN (*.word *.txt) DO TYPE %%C
啊!还要去实战