Featured image of post CMD命令与BAT批处理

CMD命令与BAT批处理

# 注释:

1
2
:: 这里是注释的内容
REM 这里是注释的内容

# 命令:

# 系统命令

 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
:: 不显示命令执行时的目录
@echo off

:: 暂停等待用户反馈后继续
pause

:: 显示当前系统所有的变量
set
[variable=[string]]: 设置变量内容, 如果[string]是空的话, 为删除变量, 如果缺少=的话, 则查看以variable为前缀的变量
/A: 计算表达式后赋值
/P: 等待终端输入后赋值交互的内容

:: 特殊的变量
%CD% - 当前目录字符串。
%DATE% - 当前日期。
%TIME% - 当前时间。
%RANDOM% - 0 和 32767 之间的随机数字。
%ERRORLEVEL% 返回上一个命令的返回值, 成功通常为0.
%1 %2 ... 运行批处理的参数, %0是文件本身的路径名字.

:: 电源操作, 如果直接执行, 在30秒后关机
shutdown
/l: 注销
/s: 关机
/r: 重启
/a: 取消定时关闭
/h: 休眠
/t {second}: 定时执行的时间, 单位:秒, 最大: 315360000(10年)
/c "comment": 注释此次执行的原因

:: 调用或执行bat/exe
call {文件名}

:: 更改活动控制台代码页。 如果不带参数使用,chcp 将显示活动控制台代码页的编号。
chcp [codePage]
codePage     国家/地区
437          美国
708          阿拉伯文(ASMO 708)
720          阿拉伯文(DOS)
850          多语言(拉丁文 I)
852          中欧(DOS) - 斯拉夫语(拉丁文 II)
855          西里尔文(俄语)
857          土耳其语
860          葡萄牙语
861          冰岛语
862          希伯来文(DOS)
863          加拿大 - 法语
865          日耳曼语
866          俄语 - 西里尔文(DOS)
869          现代希腊语
874          泰文(Windows)
932          日文(Shift-JIS)
936          中国 - 简体中文(GB2312)
949          韩文
950          繁体中文(Big5)
1200         Unicode       
1201         Unicode (Big-Endian)
1250         中欧(Windows)
1251         西里尔文(Windows)
1252         西欧(Windows)
1253         希腊文(Windows)
1254         土耳其文(Windows)
1255         希伯来文(Windows)
1256         阿拉伯文(Windows)
1257         波罗的海文(Windows)
1258         越南文(Windows)
20866        西里尔文(KOI8-R)
21866        西里尔文(KOI8-U)
28592        中欧(ISO)
28593        拉丁文 3 (ISO)
28594        波罗的海文(ISO)
28595        西里尔文(ISO)
28596        阿拉伯文(ISO)
28597        希腊文(ISO)
28598        希伯来文(ISO-Visual)
38598        希伯来文(ISO-Logical)
50000        用户定义的
50001        自动选择
50220        日文(JIS)
50221        日文(JIS-允许一个字节的片假名)
50222        日文(JIS-允许一个字节的片假名 - SO/SI)
50225        韩文(ISO)
50932        日文(自动选择)
50949        韩文(自动选择)
51932        日文(EUC)
51949        韩文(EUC)
52936        简体中文(HZ)
65000        Unicode (UTF-7)
65001        Unicode (UTF-8)

# 文件操作命令

 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
:: 查看文件内容
type {文件名}

:: 查找带有内容的行
find "内容" {文件名}
/V: 显示不包含带有内容的行
/I: 忽略大小写
/C: 统计包含内容的行数
/N: 显示包含的内容且带上它的行号

:: 比较两个文件的不同, 具体参数需要完善
fc {文件名1} {文件名2}

:: 查看目录/文件
dir [路径]
/A: 查看指定属性的文件
    D: 目录, R: 只读文件, H: 隐藏文件. 符号前面加-表示否.
    用例, 显示不隐藏的目录: dir /A:D-H
/B: 不显示标题信息或摘要
/D: 跟/B相同,但文件是按栏分类列出的
/W: 与/D版式类似, 但文件的排布顺序是横向的.
/O: 排序
    N: 按名称(字母顺序[升序]),  S: 按大小(从小到大[升序])
    E: 按扩展名(字母顺序[升序]) D: 按日期/时间(从旧到新[升序])
    G: 目录优先                -: 反转顺序
    示例, 从新到旧显示txt文件: dir /O:-D
/S: 显示子目录文件
/T: 修改时间对象
    C: 创建时间, A: 上次访问时间, W: 上次写入的时间


:: 以树形结构查看目录
tree
/F: 查看目录结构和文件
/A: 不使用制表符

:: 创建目录
mkdir 目录名
md 目录名

:: 删除目录
rmdir 目录名
rd 目录名
/S: 包括子目录也删除
/Q: 直接删除, 不需要确认

:: 删除文件, 
del 文件名
/P: 删除每一个文件都需要提示
/F: 强制删除
/Q: 直接删除, 不需要确认
/S: 包括子目录的内容也删除

:: 重命名文件, 也可以移动文件位置, 但是不能跨区动移动文件
rename {文件名1} {文件名2}
ren {文件名1} {文件名2}

:: 复制文件
copy {文件名1} {文件名2}
/Y: 无需确认, 直接执行操作
/-Y: 对每一个操作都进行确认

:: 移动文件/目录
move {路径1} {路径2}
/Y: 无需确认, 直接执行操作
/-Y: 对每一个操作都进行确认

:: 复制文件/目录
xcopy {路径1} {路径2}
/E: 包括子目录
/S: 除空目录和空子目录之外的目录和子目录
/C: 出错也继续执行
/Q: 不显示文件名
/F: 显示源文件和目标文件名
/L: 显示要复制的文件
/H: 包括隐藏文件和系统文件
/T: 只复制目录, 不复制文件
/Y: 出现覆盖时, 无需确认, 直接覆盖
/-Y: 出现覆盖时, 提示是否确认覆盖

# 时间操作命令

1
2
3
4
5
6
7
:: 查看并修改系统时间
time
/T: 只查看系统时间

:: 查看并修改系统日期
date
/T: 只查看系统日期

# 流程控制命令

 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
:: if
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 关键字之后执行该命令。
IF [/I] string1 compare-op string2 command
compare-op 可以是:

    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于
IF %ERRORLEVEL% LEQ 1 command



:: for循环
for %%i in (set) do ()
/D: 只遍历文件夹
/R {文件夹路径}: 深度遍历子文件夹中的文件(in中可以写*, 如果写.则遍历所有目录)
/L: 遍历数字(in中格式为: start, step, end)
/F: 按行遍历某个文件中的内容(in中格式为: 文件名)
如果要在for去给一个作用域外的变量做表达式运算(例如每次加一), 
需要在脚本中提前执行`setlocal enabledelayedexpansion`
:: 在命令行中使用只需要写一个%, 这里写两个%是在bat脚本中使用.
:: 下面是一个脚本的示例, 遍历当前文件夹下的txt文件.
for %%i in (*.txt) do echo %%i