抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

简介

bat脚本是Windows系统默认支持的脚本语言。

一、常用符号

@%&&&|||>>>^,;

  • @:表示本条命令不回显,仅在本条命令生效,优先级高于`echo off``

  • %:引用变量用%var%,调用程序外部参数用%1至%9等等

  • &:表示顺序执行多条命令,不管命令是否执行成功。

  • &&:表示顺序执行多条命令,当碰到执行错误的命令后,将不再执行之后的命令。

  • |:表示前一个命令的执行结果输出到后一个命令

    1
    dir d:\test | find "txt" # 查找d:\test下的txt文件
  • ||:表示顺序执行多条命令,当碰到执行正确的命令后,将不再执行之后的命令。

  • >:重定向符,可用于写入某文件。不存在则创建。

    1
    2
    1>nul #表示禁止输出正确的信息
    2>nul #表示禁止输出错误信息。
  • >>:表示追加写入某文件。

  • ^:转义符

  • ,:逗号相当于空格,在某些情况下“,”可以用来当做空格使

  • ;:当命令参数相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行

二、常用命令

/?获取命令帮助说明

1
2
# 语法
command /?

其中command是Windows系统下cmd的命令。

echo

1
2
3
4
# 语法
ECHO [ON | OFF] #启用或关闭命令回显。
ECHO [message] #显示消息
ECHO #若要显示当前回显设置,请键入不带参数的

call 和 start

  • call:从批处理程序调用另一个批处理程序。如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令。
  • start:批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令。

rem 和 ::

  • rem:注释,支持回显
  • :::注释,不支持echo回显,不能在()语块中使用

pause

暂停

errorlevel

命令执行的返回码,成功默认为0,失败为1。

goto 和 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set /p var=
echo %var%
if %var% equ 1 (goto yi) else goto er

:yi
echo 一号代码块
pause
exit

:er
echo 二号代码块
pause
exit

if

执行批处理程序中的条件处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

NOT 指定只有条件为 false 的情况下,Windows 才
应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
指定数字的退出代码,指定条件为 true。
string1==string2 如果指定的文字字符串匹配,指定条件为 true。
EXIST filename 如果指定的文件名存在,指定条件为 true。
command 如果符合条件,指定要执行的命令。如果指定的
条件为 FALSE,命令后可跟 ELSE 命令,该命令将
在 ELSE 关键字之后执行该命令。
1
2
3
4
5
6
7
8
9
10
11
如果命令扩展被启用,IF 会如下改变:
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command
其中, compare-op 可以是:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
if exist A.txt (goto start) else (goto error)

:start
echo 存在
pause
exit

:error
echo 不存在
pause
exit

pause

for

对一组文件中的每一个文件执行某个特定命令。更多查看for /?

1
2
3
4
5
6
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
FOR /D %variable IN (set) DO command [command-parameters]
# 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。
以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
或多个指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和制表符的
默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过 nth 符号指定 mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在 file-set
中使用双引号扩起文件名称。

示例:

1
2
3
4
5
6
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=," %%i in (test.txt) do (
set BL1=%%i
set BL2=%%j
set BL3=%%k
echo Line1=!BL1! Line2=!BL2! Line3=!BL3!)

set

1
2
3
4
5
6
7
8
    SET /A expression
SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式
评估器很简单并以递减的优先权顺序支持下列操作:

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

注意,在设定变量时,不能出现set /a c = 1类似的空格,不然定义失败。

三、系统内置变量

  • %appdata%:本地返回默认情况下利用程序存储数据的位置
  • %cd%:返回当前目录字符串
  • %cmdcmdline%:返回cmd.exe的位置
  • %computername%:当前系统用户名
  • %comspec%:返回cmd.exe的位置
  • %date%:系统当前日期
  • %time%:系统当前时间
  • %errorlevel%:系统上一条命令的执行反馈代码。通常用0表示没有问题。
  • %homedrive%:返回系统盘
  • %homepath%:返回用户主目录的完全路径
  • %logonserver%:本地返回验证当前登录会话的域把持器的名称
  • %number_of_processors%:cpu逻辑处理器数量
  • %path%:系统指定可执行文件的搜索路径。即系统环境变量
  • %processor_architecture%:系统处理器的芯片构造,例如AMD86
  • %processor_level%:返回计算机上安装的处理器的型号
  • %processor_revision%:返回处理器的版本号。示例:9705
  • %random%:返回一个0-32767之间的随机数
  • %systemdrive%:返回系统盘
  • %systemroot%:返回 Windows server operating system 根目录的位置
  • %temp%:返回对当前登录用户可用的运用程序所应用的默认临时目录
  • %userdomain%:本地返回包括用户帐户的域的名称
  • %username%:本地返回当前登录的用户的名称
  • %userprofile%:本地返回当前用户的配置文件的位置
  • %windir%:系统 返回操作系统目录的地位

四、网络/进程

ping

1
ping -t 127.0.0.1

更多用法使用ping /?查看。

netstat

1
2
# 查看8080端口使用情况
netstat -aon | findstr "8080"

tasklist & taskkill

1
2
3
tasklist | findstr pname		
taskkill /f /im pname # 指定任务进程名称
taskkill /f /pid 111 /pid 222 # 指定进程id

type

1
type test.txt # 显示文件中的内容

where

1
2
3
4
5
6
7
8
# 环境路径和当前目录下的文件
where mysql
# 查找c:windows路径下所有dll文件(不含子目录)
where c:\windows:*.dll
# 查找环境变量windir目录下所有含.号的文件
where $windir:*.*
# 查找c:\windows及其子目录下所有dll和exe文件
where /rc:windows *.dll *.exe

五、文件操作

创建

  • 文件创建

    1
    echo > a.txt
  • 文件夹创建

    1
    2
    md A
    md d:\test # 指定路径下生成

删除

  • del

    删除一个或多个文件。

    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

    names 指定一个或多个文件或者目录列表。通配符可用来删除多个文件。如果指定了一个目录,该目录中的所有文件都会被删除。

    /P 删除每一个文件之前提示确认。
    /F 强制删除只读文件。
    /S 删除所有子目录中的指定的文件。
    /Q 安静模式。删除全局通配符时,不要求确认
    /A 根据属性选择要删除的文件属性 R 只读文件 S 系统文件
    H 隐藏文件 A 准备存档的文件
    I 无内容索引文件 L 重新分析点
    O 脱机文件 - 表示“否”的前缀

  • rd / rmdir

    删除一个目录。

    1
    2
    3
    4
    5
    RMDIR [/S] [/Q] [drive:]path
    RD [/S] [/Q] [drive:]path
    /S 除目录本身外,还将删除指定目录下的所有子目录和
    文件。用于删除目录树。
    /Q 安静模式,带 /S 删除目录树时不要求确认

重命名

1
2
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ ...]] [destination [/A | /B]]

source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时,
尽可能使用短文件名。
/Y 不使用确认是否要覆盖现有目标文件
的提示。
/-Y 使用确认是否要覆盖现有目标文件
的提示。
/Z 用可重新启动模式复制已联网的文件。
/L 如果源是符号链接,请将链接复制
到目标而不是源链接指向的实际文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
XCOPY 源 [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/-I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T]
[/U] [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
[/EXCLUDE:file1[+file2][+file3]...] [/COMPRESS]

source 指定要复制的文件。
destination 指定新文件的位置和/或名称。
/A 仅复制具有存档属性集的文件,
不会更改属性。
/M 仅复制具有存档属性集的文件,
关闭存档属性。
/D:m-d-y 复制指定日期或之后更改的文件。
如果未提供日期,仅复制其源时间
比目标时间晚的文件。
/EXCLUDE:file1[+file2][+file3]...
指定包含字符串的文件列表。每个字符串
应在文件中单独一行中显示。当有任何
字符串与要复制的文件的绝对路径的任何部分
匹配时,将从复制中排除该文件。
如果指定 \obj\ 或 .obj 之类的字符串,将分别
排除 obj 目录下的所有文件或具有 .obj 扩展名的
所有文件。
/P 在创建每个目标文件之前提示你。
/S 复制目录和子目录(空目录除外)。
/E 复制目录和子目录(包括空目录)。
与 /S /E 相同。可用于修改 /T。
/V 验证每个新文件的大小。
/W 提示你在复制前按一个键。
/C 即使发生错误,也继续复制。
/I 如果目标不存在并复制多个文件,
则假定目标必须是目录。
/-I 如果目标不存在并复制单个指定文件,
则假定目标必须是文件。
/Q 在复制时不显示文件名。
/F 在复制时显示完整的源文件名和目标文件名。
/L 显示要复制的文件。
/G 允许将加密文件复制到
不支持加密的目标。
/H 还复制隐藏文件和系统文件。
/R 覆盖只读文件。
/T 创建目录结构,但不复制文件。不
包括空目录或子目录。/T /E 包含
空目录和子目录。
/U 仅复制目标中已存在的文件。
/K 复制属性。普通 Xcopy 将重置只读属性。
/N 使用生成的短名称复制。
/O 复制文件所有权和 ACL 信息。
/X 复制文件审核设置(隐含 /O)。
/Y 禁止提示确认是否要覆盖
现有目标文件。
/-Y 发出提示,要求确认是否要覆盖
现有目标文件。
/Z 在可重启模式下复制联网文件。
/B 复制符号链接本身与链接的目标。
/J 使用未缓冲的 I/O 进行复制。建议用于非常大的文件。
/COMPRESS 在文件传输期间请求网络压缩
(如适用)。
/SPARSE 复制稀疏文件时保留稀疏状态。

移动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
移动文件并重命名文件和目录。

要移动至少一个文件:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

要重命名一个目录:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

[drive:][path]filename1 指定你想移动的文件位置和名称。
destination 指定文件的新位置。目标可包含一个驱动器号
和冒号、一个目录名或组合。如果只移动一个文件
并在移动时将其重命名,你还可以包括文件名。
[drive:][path]dirname1 指定要重命名的目录。
dirname2 指定目录的新名称。

/Y 取消确认覆盖一个现有目标文件的提示。
/-Y 对确认覆盖一个现有目标文件发出提示。

命令行开关 /Y 可以出现在 COPYCMD 环境变量中。这可以用命令行上
的 /-Y 替代。默认值是,除非 MOVE 命令是从一个批脚本内
执行的,覆盖时都发出提示。

查找

  • dir

    打印当前目录的文件列表
    dir
    打印C盘文件列表,如果当前在c盘子目录中,则会打印本级目录的文件列表
    dir c:
    查找c盘根目录下,文件名含“txt”的文件
    dir c: | find “txt”

  • tree【打印目录结构】

切换目录

1
2
3
4
5
6
7
8
9
10
11
12
# 当前目录下的子目录
cd path
# 进入任何指定目录 cd /d d:\a
cd /d [drive]:[path]
# 返回上一层
cd ..
# 保存当前目录,并进入指定目录
pushd [paht |..]
# 回到前一个保存的目录
popd
# 当前路径
chdir

六、界面

标题

1
title [自定义标题]

颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
设置默认的控制台前景和背景颜色。
COLOR [attr]
attr 指定控制台输出的颜色属性。
颜色属性由两个十六进制数字指定 -- 第一个
对应于背景,第二个对应于前景。每个数字
可以为以下任何值:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色

补充:常用命令

1
2
3
4
# 延时5s退出
timeout /t 5 /nobreak
# 清屏幕
cls

评论