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