bat语法 系统 (重点变量)
- 格式:doc
- 大小:118.00 KB
- 文档页数:8
脚本语言-BAT 1. 概述 1.1 简介 BAT(批处理文件)就是将一条条命令放在文本里,然后批量执行。 1.2 开发工具 记事本或者EditPlus,但无法调试。虽然有第三方的IDE,也可以调试,但用起来都不顺手。 1.3 其它 打开命令提示符:开始->运行->cmd.exe 配置命令提示符:开始->运行->regedit.exe 注册表项HKEY_CURRENT_USER\Console,开启QuickEdit快速编辑 2. 语法
2.1 变量 BAT的世界里一切皆命令,却没有函数的概念,所以和其它语言相比,其对变量使用和处理就比较麻烦。 2.1.1 变量声明和赋值 声明并赋值(字符串)(默认) set /P var=[string] 声明并赋值(数字) set /A expression 查看已定义的变量 set [var] 销毁变量 set var= 指明变量的作用域 整个bat(默认) 语句块(setlocal/endlocal) 2.1.2 变量使用 引用单个变量 %var% 字符串连接 %var%%var% 字符串截取 %var:~10,5%,偏移10个字符后,取其后5个字符,类似substring %var:~0,5%,取左边的5个字符,类似left(var,5) %var:~-5%,取右边的5个字符,类似right(var,5) 字符串替换 %var:str1=str2%,将变量var中,含有str1的字符替换为str2,类似replace 类似js里的eval(通常用于BAT的代码混淆实现简单的加密) set var=dir %var% 2.1.3 系统变量 %DATE% 用跟 DATE 命令同样的格式扩展到当前日期。 %TIME% 用跟 TIME 命令同样的格式扩展到当前时间。 %RANDOM% 扩展到 0 和 32767 之间的任意十进制数字。 %ERRORLEVEL% 扩展到当前 ERRORLEVEL 数值。 环境变量 使用set查看 2.2 流程控制
2.2.1 if 判断上一个命令的返回值 IF [NOT] ERRORLEVEL number command 判断变量的值(字符串比较) IF [NOT] string1==string2 command 判断变量的值(数字比较) IF %ERRORLEVEL% LEQ 1(EQU:等于、NEQ:不等于、LSS:小于、LEQ:小于或等于、GTR:大于、GEQ:大于或等于) 判断文件是否存在 IF [NOT] EXIST filename command 2.2.2 goto 使用 goto label 声明 :label 2.2.3 pause 暂停批处理执行,并等待用户按任意键后继续 2.2.4 call 调用另一个批处理文件,等子批处理执行完后,返回主批处理并继续执行后续命令(如果不用call而直接调用别的批处理文件,那么将无法返回)。 2.2.5 for 对一个set进行操作(可以是使用通配符后的文件、或指定的列表)(使用空格或逗号分隔) FOR %variable IN (set) DO command [command-parameters] /L选项(使用数字作为种子) FOR /L %variable IN (start,step,end) DO command [command-parameters] /F选项(它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件) FOR /F ["options"] %variable IN ("string") DO command [command-parameters] FOR /F ["options"] %variable IN ('command') DO command [command-parameters] FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] 在for循环中,当一个变量被多次赋值时,%var%所获取的仅仅是var第一次被赋予的值。要想刷新var的值,就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,然后用!var!来获取var的值(感叹号!是变量百分号%的强化版)。 2.3 管道重定向 操作符 > 将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中 示例1:echo 写到文件的文字 > 文件.txt(若文件.txt不存在就创建,若存在就重写) 示例2:dir 1> nul(将出错信息输出到空设备) 示例3:di 2> nul(将结果输出到空设备)(1标准输出,2错误输出,默认为1) < 从文件中而不是从键盘中读入命令输入 示例1:sort < 文件.txt(对文件.txt内容进行排序) 示例2:set /P var= >> 将命令输出添加到文件末尾而不删除文件中的信息 示例:echo 追加到文件的文字 > 文件.txt(若文件.txt不存在就创建,若存在就追加) | 从一个命令中读取输出并将其写入另一个命令的输入中(即管道) 示例1:dir | find "文件.txt"(查看目录下是否存在文件.txt,若存在就输出整行,若不存在则不显示) 示例2:dir | more(逐屏显示dir结果,针对目录下文件较多的情况) 2.4 参数的输入和输出
2.4.1 传入参数 参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。 2.4.2 参数返回 exit /b [返回值] 操作errorlevel系统变量 2.4.3屏幕输出 echo [输出内容] echo.:输出一个空行 @=echo off:都表示不回显命令行本身(关闭回显),只是前者作用于一行,后者作用于直至echo on之前的语句块。 2.5其它 字符转义(在特殊字符前加)(若在行尾,则替换回车换行符,起到连接上下行的作用) ^ 注释(只有单行,无多行) rem和:: 通配符 * 匹配0-n个字符 ? 匹配1个字符 多行命令放在一行执行 & 同时执行 && 当前面一条命令执行成功后才执行后面命令 || 当前面一条命令执行失败后才执行后面命令 3. 常用命令
查看命令帮助:cmd /? 3.1 操作文件(夹)
编号 命令 说明 示例
1 del 删除一个或数个文件 略
2 ren 重命名文件 略
3 attrib 显示或更改文件属性 略
4 move 移动文件并重命名文件和目录 略
5 copy 将一份或多份文件复制到另一个位置 略
6 xcopy 复制文件和目录树 略
7 type 显示文本文件的内容 略
8 fc 比较两个文件或两个文件集并显示它们之间的不同 略
9 dir 显示目录中的文件和子目录列表 略
10 md 创建目录 略
11 rmdir 删除一个目录 略
12 cd 显示当前目录名或改变当前目录 略
13 tree 以图形显示驱动器或路径的文件夹结构 略
3.2 网络管理 编号 命令 说明 示例
1 ipconfig 显示当前网络配置情况 ipconfig /all 2 ping 通过发送“网际消息控制协议 (ICMP)”回响请求消息来验证与另一台 TCP/IP 计算机的 IP 级连接 ping 127.0.0.1 -t -l 1000 用一千个字节的包,无限ping目标主机
3 tracert 通过递增“生存时间 (TTL)”字段的值将“Internet 控制消息协议 (ICMP) 回响请求”消息发送给目标可确定到达目标的路径 tracert -d baidu.com 显示到达目标机所要经过的路由,但不解析路由的name 4 arp 显示和修改“地址解析协议 (ARP)”缓存中的项目 arp -a 查看本地arp表 5 route 在本地 IP 路由表中显示和修改条目 route print 查看本地路由表 6 nslookup 显示可用来诊断域名系统 (DNS) 基础结构的信息 nslookup baidu.com 8.8.8.8 用google的DNS解析baidu域名的IP 7 ftp 将文件传输到运行文件传输协议 (FTP) 服务器服务(如 Internet 信息服务)的计算机,或从这台计算机传输文件 略
8 tftp Trivial ftp 略
9 netsh Netsh 是一个命令行脚本实用程序,可让用户从本地或远程显示或修改当前运行的计算机的网络配置 netsh interface ip set address "本地连接" dhcp 将本机IP设成自动获取 10 netstat 显示协议统计信息和当前 TCP/IP 网络连接 netstat -ano 以数字形式显示所有连接和监听端口,并关联所属进程 ID 11 telnet telnet 命令允许您与使用 Telnet 协议的远程计算机通讯。而且还能测试目标机的某个TCP端口是否打开,对于诊断网络问题特别有用。 telnet 127.0.0.1 80 测试目标机的80端口是否打开
3.3 进程管理 编号 命令 说明 示例
1 tasklist 枚举进程 tasklist | find "notepad.exe" 2 taskkill 杀进程 taskkill /PID 4408 /F /T