批处理学习
CMD命令基础
关机、重启、注销、休眠、定时
- 关机:shutdown /s
- 重启:shutdown /r
- 注销:shutdown /l
- 休眠:shutdown /h /f
- 取消关机:shutdown /a
- 定时关机:shutdown /s /t 7200(7200 秒后关机)
目录操作
- 显示、切换目录:cd cd D:\
- 显示目录中的文件:dir
- 显示目录结构: tree
文件夹/文件操作
- 新建文件夹:md
- 打开文件夹:explorer …
- 删除文件夹:rd
- 删除文件: del
- 新建文件:echo 123>>1.txt
- 重命名文件:ren
- 显示文件内容:type
- 拷贝文件:copy
- 逐屏显示文件内容:more
网络操作
- 查看本地IP:ipconfig
- ping操作: ping ip/域名 -t -l 65500
- 清除本地 DNS 缓存:ipconfig /flushdns
- 路由追踪:tracert ip/域名
进程管理
- 显示当前正在运行的进程:tasklist
- 运行程序或命令:start 程序名
- 结束进程:taskkill /im notepad.exe(关闭记事本)
- 结束进程:taskkill /pid 1234(关闭 PID 为 1234 的进程)
服务管理
- 显示当前正在运行的服务:net start
- 启动指定服务:net start 服务名
- 停止指定服务:net stop 服务名
windows相关
- 查看Windows版本:winver
- 启动计算器:calc
- 清屏:cls
- 设置cmd窗口的标题:title
- 显示日期:date
- 显示时间:time
- 调用一个批处理:call
- 显示、设置或删除 Windows 环境变量:set
批处理命令
批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,如同C、Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程式是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何当前系统下可运行的程序都可以放在批处理文件中运行。
新建一个.bat 文件 ,内容如下:
@echo off
ping www.baidu.com >>1.txt
结果是在1.txt文本文件中,显示ping命令的结果
批处理,实际上是在windos的cmd中调用相对应的命令。
批处理基础
1.注释
- ::
任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。而标号分为有效和无效两种。
有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号。
无效可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。 - rem
在执行rem命令时,命令是可以回显的 - %注释内容%
2.特殊符号
- 命令行回显屏蔽符:@
- 批处理变量引导符:%
- 重定向符: >、>>、<、>&、<&
- 命令管道符:|
- 转义字符:^
- 组合命令:&、&&
- 字符串界定符:""
批处理中的变量
- 系统变量
- 自定义变量
系统变量
%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
%CD% 本地 返回当前目录字符串。
%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。
%ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION% 系统 返回处理器的版本号。
%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)
%SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。
%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。
%TIME% 系统 返回当前时间。
%USERDOMAIN% 本地 返回包含用户帐户的域的名称。
%USERNAME% 本地 返回当前登录的用户的名称。
%USERPROFILE% 本地 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
自定义变量
在windows中使用set命令来自定义变量。
@echo off
set /p var=请输入变量的值
echo %var%
pause
或
@echo off
set var=我是值
echo %var%
pause
IF 命令
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 命令。
ELSE 必须在 IF 之后出现在同一行上
示例:
@echo off
net user
IF %ERRORLEVEL% == 0 (echo net user 执行成功了! ) else echo net user 执行失败了!
pause
@echo off
net user
IF %ERRORLEVEL% == 0 (echo net user 执行成功了! ) else echo net user 执行失败了!
pause
@echo off
if not exist "c:\test" (echo 不存在文件) ELSE echo 存在文件
pause
IF增强的用法
IF [/I] string1 compare-op string2 command #参数/I表示不区分大小写
IF CMDEXTVERSION number command
IF DEFINED variable command #判断变量是否存在,很有用
CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样。除了它
是在跟与命令扩展名有关联的内部版本号比较。
如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样
IF DEFINED variable command
IF NOT “variable”=="" command
上面两条命令效果一样。
用“set variable=”命令使变量variable变成未定义,即空值。
用语句IF DEFINED variable command判断变量是否存在时,请注意variable为不使用引导符号%的变量名,不能用写为%variable%,否则出错。
例:
if defined aa (echo 变量aa存在) else (echo 变量aa不存在)
运行显示:变量aa不存在
例:
set aa=123
set aa=
if defined aa (echo 变量aa存在) else (echo 变量aa不存在)
运行显示:变量aa不存在
例:
@echo off
if a == A (echo 我们相等) ELSE echo 我们不相等
pause
执行后会显示:我们不相等
例:
@echo off
if /i a == A (echo 我们相等) ELSE echo 我们不相等
pause
最后面还有一些用来判断数字的符号
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
@echo off
set /p var=请输入一个数字:
if %var% LEQ 4 (echo 我小于等于4) ELSE echo 我不小于等于4
pause
FOR 命令
基本格式
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母表示可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
参数:FOR有4个参数 /d /l /r /f
参数 /d 主要搜索匹配目录
FOR /D %%variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件
名匹配。
@echo off
for /d %%i in (c:\*) do echo %%i
pause
或
@echo off
for /d %%i in (???) do echo %%i
pause
*号表示任意N个字符,?号只表示任意一个字符
参数 /R 搜索指定目录树中的匹配文件
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的
FOR 语句。如果在 /R 后没有指定目录,则使用当前
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
@echo off
for /r c:\Users\asus\Desktop\111111111111111111\ %%i in (*.txt) do echo %%i
@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause
@echo off
for /r %%i in (*.exe) do echo %%i
pause
参数 /L 按数字序列(start,step,end)循环
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)。
使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
@echo off
for /l %%i in (1,1,3) do (start cmd | echo %%i)
参数 /F 处理命令输出、字符串及文件内容
详细的格式为:
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]
带引号的字符串"options"包括一个或多个
指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
的 for 本身。这会导致额外变量名称的分配。m-n
格式为一个范围。通过 nth 符号指定 mth。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。经测试,该参数最多
只能区分31个字段。
usebackq - 使用后引号(键盘上数字1左面的那个键`)。
未使用参数usebackq时:file-set表示文件,但不能含有空格
双引号表示字符串,即"string"
单引号表示执行命令,即'command'
使用参数usebackq时:file-set和"file-set"都表示文件
当文件路径或名称中有空格时,就可以用双引号括起来
单引号表示字符串,即'string'
后引号表示命令执行,即`command`
@echo off
rem 首先建立临时文件test.txt
echo ;注释行,这是临时文件,用完删除 >test.txt
echo 11段 12段 13段 14段 15段 16段 >>test.txt
echo 21段,22段,23段,24段,25段,26段 >>test.txt
echo 31段-32段-33段-34段-35段-36段 >>test.txt
FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
Pause
Del test.txt
运行显示结果:
11段 13段 14段 15段 16段
21段 23段 24段,25段,26段
31段 33段 34段-35段-36段
请按任意键继续. . .