1.echo
1.1 echo [on][off]
控制批处理命令在执行时是否显示
不能控制运行结果是否显示
如果不显示命令echo off,则需要在该命令行前加上”@”
@:加在命令行前面,表示运行时不显示命令行本身
1.2 echo
显示当前的回显设置
1.3. echo string \\不需要双引号
输出string
1.4 关闭路径提示字符串
在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现.
1.5 echo.
输出空行
1.6 echo string >a.txt
将文本写入文件
2. cmd
启动新的cmd窗口
2.1 cmd/c
执行完批处理后关闭窗口
2.2 cmd/k
执行完批处理不关闭窗口
2.3 cmd.>name.txt
新建空白文件
3. PAUSE
暂停
让使用者看清楚程序信息
显示错误的汇编代码信息
4. 几类重定向
4.1 标准错误重定向输出
[command] 2>out.txt
4.2 标准输出重定向输出
[command] 1>out.txt
4.3 标准重定向输出
[command] 1>out.txt 2>&1
5. 常用环境变量
环境变量 | 说明 | 结果 |
---|---|---|
%CD% | 列出当前目录 | F:\ |
%CMDCMDLINE% | 启动当前cmd所使用的命令行 | cmd /c F:\blog.bat |
%COMPUTERNAME% | 列出计算机名 | LED-PC |
%DATE% | 列出当前日期 | 2016-07-12 周二 |
%ERRORLEVEL% | 列出了最近使用的命令的错误代码 | 0 |
%HOMEDRIVE% | 列出用户主目录驱动 | C: |
%OS% | 列出系统的名字 | Windows_NT |
%PROCESSOR_ARCHITECTURE% | 列出处理器的芯片架构 | AMD64 |
%PROCESSOR_IDENTIFIER% | 列出处理器的描述 | Intel64 Family 6 Model 69 Stepping 1, GenuineIntel |
%NUMBER_OF_PROCESSORS% | 列出处理器的个数 | 4 |
%RANDOM% | 随机一个0-32767的数 | 27194 |
%TIME% | 列出当前时间 | 16:21:55.34 |
%WINDIR% | 列出操作系统目录位置 | C:\Windows |
%ALLUSERSPROFILE% | 列出用户配置文件 | C:\ProgramData |
6. copy
/y
不使用确认是否要覆盖现有目标文件的提示
/-y
使用确认是否要覆盖现有目标文件的提示
注:没有后缀名则默认是目录
7. xcopy
/s 默认
复制目录,但不复制空目录
/e
复制目录,包括空目录
/t
复制目录结构但不复制文件,不包括子目录和空目录
/i
如果目标不存在,且要复制多个文件,则假定目标必须是目录
- xcopy /i/t/e
创建包含子目录和空目录的目录结构
- xcopy /i/e dir1 dir2
将目录dir1下的所有文件和文件夹复制到dir2
8. set
set var=c:\
声明变量内容为”=”后的字符串
copy c:\test.txt c:\%var%.txt
set /a var=8*4
声明”=”右边的字符串为数字表达式
set /p a=<c:\test.txt
重定向输入
set /p a=请输入一个数字:
赋值来源键盘
9. start
调用外部程序
start /d d:\ /max /wait
- /d d:\ 启动path为d:\的cmd
- /max 开始时窗口最大化
- /min 开始时窗口最小化
- /wait 启动应用并等待终止
start d:\
启动目录为d:\的窗口
10. choice
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令,返回值分别为1234…
choice /c:abc /m aaa,bbb,ccc /t 10 /d b
rem errorlevel 判断从高到低,同时跳转内部要写end
if errorlevel 3 goto ccc
if errorlevel 2 goto bbb
if errorlevel 1 goto aaa
:aaa
echo aaa
goto end
:bbb
echo bbb
goto end
:ccc
echo ccc
goto end
:end
blog.bat
/c
选项列表
/m
选项提示信息
/t
默认选择之前的暂停时间
/d
/t秒后的默认选项
11. if
11.1 输入判断
- 格式一(else后面需要空格)
else 和if的尾端要在同一行上
if "%1"=="1" (
goto x
) else (
goto end
)
:x
echo 12
:end
pause
- 格式二
其中goto x需要用新的一行终止
if "%1"=="1" (goto x) else goto end
:x
echo 12
:end
pause
11.2 文件存在判断
否定:if not exist
if exist F:\self\Blog\testbat\*.gif del F:\self\Blog\testbat\*.gif
11.3 程序最后返回值判断
如果最后运行的程序返回一个等于或大于指定数字的退出代码,指定条件为 true。
if errorlevel 1 goto first
数值越高表示错误越严重,所以通常处理时由高到低
返回值为零时代表命令执行成功
11.4 自定义比较
符号名 | 含义 |
---|---|
EQU | 等于 |
NEQ | 不等于 |
LSS | 小于 |
LEQ | 小于或等于 |
GTR | 大于 |
GEQ | 大于或等于 |
ERRORLEVEL
此处应该为%ERRORLEVEL%
IF %ERRORLEVEL% LEQ 1 goto okay
字符串比较
if str1 leq %1 goto other
12. dir
/a
显示具有指定属性的文件
- d 目录
- r 只读文件
- h 隐藏文件
- s 系统文件
- - 表示”否”前缀
/b
使用空格式,没有标题信息或者摘要
/l
用小写
/s
显示指定目录和子目录下的所有文件
13. for
in中的元素的分隔符 :空格键、跳格键、逗号、分号或等号分隔
函数体%%i用逗号、/、空格键
分隔符集中的字符之间不需要分隔符
for语句以行为单位
变量名区分大小写
13.1 基本使用
echo 显示计算机磁盘盘符
set str=c d e f g h i j k l m n o p q r s t u v w x y z
for %%i in (%str%) do if exist %%i: echo %%i:
echo 当前目录下的所有文件
for %%i in (*.*) do echo %%i
echo 当前目录下的所有目录,且目录路径存于set中
for /d %%i in (*) do echo %%i
echo 当前目录下的递归目录树
for /r /d %%i in (*) do echo %%i
echo 当前目录下的递归目录树
for /r /d %%i in (.) do echo %%i
echo当前目录及其下的所有子目录的所有exe文件
for /r %%i in (*.exe) do echo %%i
echo 增量形式从开始到结束的一个数字序列
for /l %%i in (5,-1,3) do echo %%i
13.2 for /f
for /f "eol=. delims=; tokens=1-4,* skip=1 " %%i in ("test1.txt") do echo %%i,%%j,%%k
skip
skip=n:跳过n行,解析n+1行,in中的每个文件都跳过n行
eol
忽略以”.”开始的行;如果不指定eol默认忽略以”;”开始的行(注:eol=;这种默认设置,在delims=;时变得无效)
tokens
- 默认值为空格或者跳格键
- 格式一:1-4表示1,2,3,4;
- 格式二:1,2,表示字符串从左往右被切分成紧跟在之前的数值所表示的节数之后,剩余整体被*所表示的一个变量接收
- %%i和%%j和%%k由tokens隐式声明,第一个%%i由指定的形式变量决定
- 最大值不能超过26,而且不要试图声明一个高于字母”z”,或者”Z”的变量
- 默认值为1
usebackq
FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i
set为dos命令,上述例子显示环境变量
13.3 变量扩展
命令 | 作用 | 执行结果 |
---|---|---|
%~I | 删除任何引号(“),扩展 %I | F:\self\Blog\testbat\blog.bat |
%~fI | 将 %I 扩展到一个完全合格的路径名 | F:\self\Blog\testbat\blog.bat |
%~dI | 仅将 %I 扩展到一个驱动器号 | F: |
%~pI | 仅将 %I 扩展到一个路径 | \self\Blog\testbat\ |
%~nI | 仅将 %I 扩展到一个文件名 | blog |
%~xI | 仅将 %I 扩展到一个文件扩展名 | .bat |
%~sI | 扩展的路径只含有短名 | F:\self\Blog\testbat\blog.bat |
%~aI | 将 %I 扩展到文件的文件属性 | –a—— |
%~tI | 将 %I 扩展到文件的日期/时间 | 2016-07-13 17:08 |
%~zI | 将 %I 扩展到文件的大小 | 127 |
14. 延迟扩展变量
- for语句中延迟变量扩展
取变量时需要使用!var!
setlocal enabledelayedexpansion
set num=0
for /f %%i in ('dir /a-d /b') do (
set /a num+=1
echo the values of num is !num!
)
- 简单延迟变量扩展
set num=3&&call echo %num%
15. find
type a.txt|find "string"
如果没有指定路径,find将搜索键入的或者由另一个命令产生的文字
FIND [/V] [/C] [/N] [/I] “string” [[drive:][path]filename[ …]]
注:上述string双引号是必须的
/v
显示所有未包含指定字符串的行
/c
显示包含字符串的行数
/n
显示行号
/i
搜索时忽略大小写
16. 预处理机制
预处理含义:将一条完整的语句读入内存,语法有误则给出错误提示或者退出批处理环境;无误则在语句读入内存之前将被引用的变量以及百分号对替换为变量的值
- 一条完整的语句
- 变量的替换先于特殊符号的处理
17. 组合命令
命令 | 作用 |
---|---|
& | 顺序执行而不管是否有命令执行失败 |
&& | 顺序执行,自动判断,当命令出错时不再执行后续命令 |
|| | 执行多条命令,遇到一个执行正确的命令就退出 |
&和&&优先级高于||
18. 管道命令
命令 | 作用 |
---|---|
| | 前一命令的输出当做后一命令的输入 |
> | 输出重定向,清空原文件 |
>> | 输出重定向,追加到原文件 |
>& | 将一个句柄的输出写入到另一个句柄的输入 |
< | 输入重定向 |
19. 特殊符号
命令 | 作用 |
---|---|
^ | 特殊符号的前导符号 |
, | 和空格一样的缺省分隔符号 |
() | 包含命令 |
演示:
dir c:\ && dir d:\ > a.txt
rem a.txt中只保存了D盘的文件目录
(dir c:\&&dir d:\)>a.txt
rem a.txt中保存了C盘和D盘的文件目录
20. 时间日期
命令 | 作用 |
---|---|
time | 显示当前时间设置和输入新时间的提示 |
time \t | 显示当前时间 |
date | 显示当前时间设置和输入新时间的提示 |
date \t | 显示当前日期 |
21. 循环批处理
@echo off
if exist C:\Users\LED\Desktop\testbat\*.gif del C:\Users\LED\Desktop\testbat\*.gif
a.bat
22. attrib
attrib +s+h+r path
+ 设置属性
- 清除属性
r
只读属性,即写保护
a
存档属性
存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.
s
系统属性,标明文件为系统调用
注意:r属性必须和a和s属性一同使用
/s
处理当前文件夹及子文件夹中匹配文件(默认当前文件夹)
23. task
根据线程ID找到线程详细信息
tasklist|findstr "2720"
tasklist /fi "PID eq 2720"
其他筛选器参数
根据线程ID终止线程
taskkill /PID 7380 /F /T
/F
强制终止进程
/T
终止指定的进程和由它启用的子进程
24. 空设备nul
command 1>null 2>&1
25. netstat
@echo off
netstat -a -n -o> a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause
-a
显示所有连接和侦听端口
-n
以数字形式显示地址和端口号
-o
显示于每个链接关联的进程ID
26. 跳转
goto label
:label
27. 调用其他批处理
call newname.bat 0
newname.bat中%1用0替代
28. 批处理长文件名表示格式
当文件名过长时,采用8个字符缩写,即写头六个字母(略去空白),另加波浪号和1,如果有重复的则递增
例子:
Tempor~1
29. 注册安装
regsvr32
/s 指定regsvr2安静运行
msi
*.msi /qn 静默安装
*.msi /qb 显示基本流程
30. 注释
rem
rem echo 注释
::
:: echo 注释
31. 批处理参数的使用
%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示
批处理必须使用两个百分号,其中一个会被过略掉
32. 其他命令
cls
清空屏幕
help | more
前一命令的输出当做后一命令的输入,分页显示帮助
33. 注解
- bat是16位的dos cmd 是32位的dos