Dos批处理命令一览表
命令类型 | 命令 | 功能 | 参数 | 说明 |
网络命令 | ping | 测试IP连接 | ||
ipconfig | 查看IP配置 | |||
arp | 解析地址 | |||
start | 开启命令 | |||
shutdowm | 关闭或重启计算机 | |||
taskkill | 关闭指定进程 | |||
延迟环境变量扩展命令 | setloacl enabledelayedexpansion | 延迟环境变量扩展 | set/a a=1,b1=10 Setlocal EnableDelayedExpansion echo:!b%a%! … | |
显示语句 | echo | 显示信息 | 1、输出提示信息echo hello,world | |
@ | 2、关闭该命令的回显:@ echo 信息 | |||
@ | 3、打开回显或关闭回显功能@echo off ;@echo on | |||
.,:;"/]+\ 输出空行 | 4、输出空行,即相当于输入一个回车echo./echo,/echo:/echo;/echo"/echo//echo]/echo+/echo\/ | |||
| 答复命令中的提问 | 5、答复命令中的提问echo Y|rd /s c:\abc | |||
> | 6、建立新文件或增加文件内容echo 123>myfile.txt;echo. >myfile.txt | |||
注释语句 | rem | 注释 | 注释后会回显。例rem 上面的echo 语句用于显示提示。 | |
:: | 执行时不会回显。例::上面的echo 语句用于显示提示。 | |||
pause | 暂停 | Echo 其他提示语 & pause > nul | ||
目录语句 | cd | 目录切换 | .\.. | 同分区切换 1、cd C:\WINDOWS 2、切换到当前目录 cd. 3、返回根目录cd\ 4、返回上一级目录 cd.. |
/d不同分区切换 | cd /d d:\123\abc D: | |||
显示当前的完整路径 | %cd% | echo 当前路径是 %cd% | ||
文件语句 | dir | 列文件名 | /S 显示指定目录和所有子目录中的文件。 | dir /s c:\windows |
/A 显示具有指定属性的文件 D 目录 R 只读文件 H 隐藏文件 dir /ah c:\ A 准备存档的文件 S 系统文件 - 表示“否”的前缀 | 例:dir /ad-h c:\ 列出C:\下所有的文件夹,但不包含隐含的文件夹。 | |||
/p分页显示 | dir /p c:\ | |||
/b,只列出文件名称,不带有日期,时间,创建者等信息 | dir /b c:\ | |||
/o N 按名称(字母顺序) S 按大小(从小到大) E 按扩展名(字母顺序) D 按日期/时间(从先到后) G 组目录优先 - 颠倒顺序的前缀 | 1、按照文件名的字母顺序排列 dir /on c:\ 2、优先列出文件夹,并且文件夹和文件都按字母顺序排列。 dir /ogn c:\ | |||
属性命令 | attrib | 显示或更改文件属性 | - 清除属性。 R 只读文件属性。 A 存档文件属性。 S 系统文件属性。 H 隐藏文件属性。 [drive:][path][filename] 指定要处理的文件属性。 /S 处理当前文件夹及其子文件夹中的匹配文件。 /D 也处理文件夹。 | attrib d:\ pagefile.sys attrib –h d:\ pagefile.sys清除“隐藏”属性 attrib s h d:\ pagefile.sys设置“系统”和“隐藏”属性 attrib h d:\123\*.bat /s 批量将d:\123及其子目录下的所有bat文件设置为“隐藏”属性 attrib h d:\123 /s /d;(d 必需和/s一起使用) |
删除命令 | del | 删除一个或数个文件 | /P 删除每一个文件之前提示确认 | del /p d:\123\*.*删除每一个文件之前提示确认 |
/F 强制删除只读文件 | ||||
/S 从所有子目录删除指定文件。 | del /s d:\123\*.* 删除d:\123目录及其子目录下所有文件 | |||
/Q 安静模式。删除全局通配符时,不要求确认 | del /s /q d:\123\*.* 删除d:\123目录及其子目录下所有文件,不要求确认 | |||
/A R 只读文件 S 系统文件 H 隐藏文件 A 存档文件 - 表示“否”的前缀 | 根据属性选择要删除的文件。 del /ar /s d:\123\*.* 删除d:\123目录及其子目录下所有只读属性的文件 | |||
复制命令 | copy | 复制文件,不能复制文件夹 | 文件名 目录名 | copy c:\123.txt d:\ 把123.txt复制到d:\目录下。 |
文件名 文件名 | copy c:\123.txt d:\abc.bat 把123.txt复制到d:\目录下,并把它修改为abc.bat | |||
目录名 目录名 | copy c:\123 d:\abc 将c:\123 目录中所有文件复制到d:\abc目录中 | |||
. | copy .\123把当前目录下的123子目录中的文件全部拷到当前目录 | |||
/y无需确认 | copy c:\123\*.rm d:\abc /y 重名文件无须确认直接覆盖 | |||
合并文件 | /b合并文件 | 例如:把两个文件复制到第三个文件中,路径中有空行,用双引号 copy /b "!lastfilename!"+"!thisfilename!" testfilename.html copy /b d:\1.txt+d:\2.mp3 把2.mp3合并进了1.txt,缺省情况下,合并后的文件名是命令中的第一个文件 | ||
xcopy | 复制文件和目录树,默认情况下,不复制隐藏或系统文件 | /S 复制非空的目录和子目录 | xcopy /s d:\123 e:\kkk\ 复制d:\123目录下所有文件(夹)到e:\kkk,不包括空的子目录 | |
/E 复制所有子目录,包括空目录。同时使用 /e、/s 和 /t 命令行选项。 | xcopy /e d:\123 e:\kkk\ 复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录 | |||
/H 复制具有隐藏和系统文件属性的文件。默认情况下xcopy 不复制隐藏或系统文件。 | xcopy /e /h d:\123 e:\kkk\ 复制d:\123目录下所有文件(夹)到e:\kkk,包括空的子目录、隐藏或系统的文件 | |||
/T 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 选项。 | ||||
/Y 禁止提示您确认要覆盖现存的目标文件。通过参数/y,可以实现重名文件无须确认直接覆盖。 | ||||
文件夹命令 | md | 创建文件夹 | 有空格要用双引号 | md d:\abc 在D盘下建立一个名为abc的文件夹 md "d:\my game" |
同时创建多个目录 | md abc D:\gmae\123 abcd 在当前目录下建立abc和abcd两个文件,同时D:\gmae下也建立一个文件夹123 | |||
创建多级目录 | md d:\abc\abcd\abcde 在D盘下建立文件夹abc,在abc中建新文件夹abcd,接着再在abcd中建文件夹abcde | |||
rd | 删除文件夹 | rd d:\123 rd abc 删除当前目录下的空文件夹 | ||
/S 除目录本身外,还将删除指定目录下的所有子目录和 文件 | rd /s d:\123 | |||
/Q 安静模式,带 /S 删除目录树时不要求确认 | rd /s /q d:\123 | |||
重命名 | ren | 重命名文件(夹): | 文件名 文件名 | ren d:\123.txt 456.bat |
批量命名 | ren *.bat *.txt 把后缀名为bat的文件批量更改为txt后缀后的文件 | |||
移动命令 | move | 移动(重名名)文件(夹):不可以跨分区移动文件夹 | 文件夹A 文件夹B | move d:\abc d:\abcd 如果目标文件夹abcd不存在,则把abc移到d:\下,并把自身名称更改为abcd。 ①如果B存在,则把A移动到B目录下。 ②如果B不存在,则把A移动到B所在的目录下,同时A被重命名为B。 |
文件名A 文件夹B | move 123.txt e:\abc ① 将把A移动到B目录下。 ② 如果B文件夹内有和A文件同名的: A和B为同一分区,则提示:是否覆盖/不覆盖/全部覆盖? A和B为不同分区,则提示:文件存在。不做任何操作! | |||
文件名A 文件名B | move d:\123.txt d:\abc\456.txt 如果456.txt不存在,则把123.txt移到d:\abc目录下,并重命名为456.txt ①A和B为同一分区,如果B存在,则系统会提示你是否将把A重命名为B;如果B不存在就把A移动到B所在的目录下的同时,重命名为B。 ②A和B为不同分区,如果B存在,则命令不执行;如果B不存在,则把A移动到B所在的目录下并重命名为B。 | |||
/Y 取消确认改写一个现有目标文件的提示 | move /y 123.txt 456.txt 如果123.txt和456.txt都存在,通过/y参数后,系统不会提示你,而直接把123.txt覆盖456.txt | |||
/-Y 对确认改写一个现有目标文件发出提示。 | ||||
查找命令 | find | 字符串查找 | 字符串A 文件B | find "abc" d:\abc.txt |
/V 显示所有未包含指定字符串的行 | find /v "abc" d:\abc.txt 查找不包含"abc"字符串的行 | |||
/C 仅显示包含字符串的行数。 | find /c "abc" d:\abc.txt 统计包含"abc"字符串的行数 | |||
/N 显示行号 | find /n "abc" d:\abc.txt 字符串"abc"所在的行号 | |||
/I 搜索字符串时忽略大小写 | find /i "abc" d:\abc.txt | |||
/OFF[LINE] 不要跳过具有脱机属性集的文件 | ||||
findstr | 字符串查找增强 | findstr "icq" 123.txt 在123.txt中查找包含有“icq”这三个字符串的行 | ||
/R 强调以正则表达式规则来解读字符串 . 通配符: 任何字符 * 重复: 以前字符或类别出现零或零以上次数 ^ 行的开始 $ 行的终点 [class] 字符类别: 任何在字符集中的字符 [^class] 补字符类别: 任何不在字符集中的字符 [x-y] 范围: 在指定范围内的任何字符 \x Escape: 元字符 x 的文字用法 \<xyz 字位置: 字的开始 xyz\> 字位置: 字的结束 | findstr /r "icq msn" 123.txt 在123.txt中查找包含有 “icq”或“msn”的行,查找的多个字符串间用空格隔开 findstr "\<echo" 123.txt 匹配所有含有以echo为前缀的字符串的行 findstr "echo\>" 123.txt 匹配所有含有以echo为后缀的字符串的行 findstr "1\\" 123.txt 或findstr "1\\\\" 123.txt 在文件123.txt中查找可以匹配“1\”字符串的行 | |||
/S 在当前目录和所有子目录中搜索 匹配文件。 | findstr /s /i "MSN" *.txt 在当前目录和所有子目录中的txt文件中搜索字符串"MSN"(不区分字母大小写)。 | |||
/I 指定搜索不分大小写。 | ||||
/C:string 使用指定字符串作为文字搜索字符串。 | findstr /c:"icq msn" 123.txt 在123.txt中查找包含有 “icq msn”这个字符串的行。这里“icq msn”是一整体。 | |||
/B 在一行的开始配对模式。 | ||||
/E 在一行的结尾配对模式。 | ||||
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。 | ||||
设置变量命令 | set | 设置变量的值 | %var%引用变量 | SET 命令不允许变量名含有等号。 set var =abcd |
set /p 用户自己输入变量的值 | set /p var=请输入变量的值: | |||
字符串替换 | :%PATH:str1=str2% | set var=%a: =%把字符串a中的空格替换为空字符 | ||
字符串截取 | :%a:~[m[,n]]% | set var=%a:~1,-3% 把变量a 第2位起到倒数第3位前的值赋予var | ||
进行简单计算 | set /a expression ( ) 分组 ! ~ - 一元运算符 * / % 算数运算符 - 算数运算符 << >> 二进制逻辑移位 & 二进制按位“与” ^ 二进制按位“异” | 二进制按位“或” = * = / = % = = -= 算数赋值 &= ^= |= <<= >>= 二进制运算赋值 , 表达式分隔符 | set /a var=10/3 set /a var+ =1对应原始语法就是set /a var = %var%+1 set /a var*=2对应原始语法就是set /a var= %var%*2 set /a var= 1 " ^ "< 1 异运算 set /a var= 1 "%"< 1 取模运算 set /a var= 3< "<<" 2 左移位运算, 3 的二进制为11,左移2 位为 1100,换成十进制就是12,自行验证 set /a var= 4 < ">>" 2 右移位运算,4 的二进制为100,右移动2 位为 1,结果为1 | ||
循环命令 | for | for/f查询文件 | 1、for /f %%i in (文件名) do (……) %~dpI - 仅将 %I 扩展到一个驱动器号和路径
| for /f %%i in (test.txt) do echo %%i; 显示test.txt中的内容 for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i ; 显示当前目录下文件名中含有test字符串的文本文件 for /f "delims=. tokens= 1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k 把bbs.bathome.cn这串字符中的点号换为短横线 |
delims=" 切分字符串,默认以空格键或跳格键作为字符串的切分字符 | for /f "delims=," %%i in (test.txt) do echo %%i 提取每行第一个逗号之前的所有内容 for /f "delims=.," %%i in (test.txt) do echo %%i 提取第一个点号或第一个逗号之前的内容 | |||
tokens= 定点提取 | 2.for /f "tokens=* delims=" %%i in ("Hello world.") do ( ) 没有分割符,所有的节,把字符串“Hello world.”赋值给%%i for /f "delims=, tokens=2,5" %%i in (test.txt) do echo %%i %%j 提取以逗号切分的第2节和第5节字符串 | |||
skip=n跳过无关内容,直奔主题 | for /f "skip=2" %%i in (test.txt) do echo %%i 跳过头两行内容,从第3行起显示test.txt中的信息 | |||
eol=忽略以指定字符打头的行,只能指定1个,默认忽略以分号打头的行内容 | for /f "eol=;" %%i in (test.txt) do echo %%i 忽略以分号打头的那些行 for /f "eol=" 强制指定字符为空,取消默认设置 | |||
usebackq 增强型参数。 如果文件名有空格或& 时使用该参数, 4、for /f "usebackq" %%i in ("文件名") do (……) 5、for /f "usebackq" %%i in (`命令语句`) do (……) 6、for /f "usebackq" %%i in ('字符串') do (……) | for /f "usebackq" %%i in ("test 1.txt") do echo %%i | |||
for /d查询目录 | 不搜索文件、子目录 | for /d %%i in (???) do echo %%i 执行后会把C盘根目录下的1-3个字母的文件目录名字打印出来,而文件则不显示 for /d %%i in ("C:\Program Files\*") do echo %%i 有空格用双引号 | ||
for /r遍历搜索 | 递归操作,对其目录及其子目录的所有文件进行操作,不会遍历隐藏文件 1、for /r %%i in (含通配符的文件名") do (……) 2、for /r %%i in (文件名) do (……) 3、for /r %%i in ('字符串') do (……) | for /r c:\ %%i in (boot.ini) do echo %%i for /r c:\ %%i in (*.exe) do echo %%i 列出C 盘根目录,和每个目录的子目录下面全部的EXE 文件 for /r c:\ %%i in (boot.ini) do echo %%i 不管boot.ini是否存在而将枚举c 盘所有目录 for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i 只列举 boot.ini存在的目录 | ||
for /l 建立序列 | for /l %%i in (1,1,5) do echo %%i 打印从 1 2 3 4 5这样5 个数字,而且每个数字占一行 | |||
判断命令 | if | 判断 | 判断两个字符串是否相等,if "字符串1"=="字符串2" command 语句; | |
判断两个数值是否相等,if 数值1 equ 数值2 command 语句; 等于 equ equal 大于 gtr greater than 大于或等于 geq greater than or equal 小于 lss less than 小于或等于 leq less than or equal 不等于 neq no equal | if %var% geq 10 (echo 此数大于或等于10) else echo 此数小于10 | |||
判断判断驱动器,文件或文件夹是否存在,if exist filename command 语句; | if exist "e:" (echo e盘存在) else echo e盘不存在 if exist test\. (echo test 是文件夹) else echo test 是文件 判断是否是文件夹 | |||
判断变量是否已经定义,if defined 变量 command 语句; | if defined a (echo 变量 a 已定义) else (echo 变量 a 没有被定义) | |||
判断上个命令的返回值,if errorlevel 数值 command 语句。 | 当使用 if errorlevel 0 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于0 的时候,将执行command操作;errorlevel 返回值可以在0~255 之间。 当使用 if %errorlevel%==0 cmmand 句式时,它含义是:如果返回的错误码值等于0 的时候,将执行command操作。 | |||
if /i 不区分大小写 | if /i "a"=="A" (echo 相同) else echo 不相同 | |||
1。if not "字符串1"=="字符串2" command 语句; 2。if not数值1 equ 数值2 command 语句; 3。If not exist filename command 语句; 4。if not defined 变量 command 语句; 5。if not errorlevel 数值 command 语句。 | if not exist "c:\" (echo C盘存在) else echo C盘不存在 | |||
特殊符号 | 特殊符号 | 重定向符>,<,>>,>&,<& | >将命令输出写入到文件或设备 (如打印机),而不是命令提示符窗口或句柄 | echo hello120 >1.txt |
>>将命令输出添加到文件末尾 而不删除文件中已有的信息。 | echo hello120 >>1.txt | |||
< | 从文件而不是从键盘或句柄读入命令输入。 | |||
>& | 将一个句柄的输出写入到另一个句柄 的输入中。 | |||
<& | 从一个句柄 读取输入并将其写入到另一个句柄输出中。 | |||
句柄 句柄的数字代号 描述 STDIN 0 键盘输入 STDOUT 1 输出到命令提示符窗口 STDERR 2 错误输出到命令提示符窗口 UNDEFINED 3-9 句柄由应用程序单独定义,它们是各个工具特有的 | findfile file.txt>search.txt 2<&1 查找 File.txt,然后将句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到 Search.txt | |||
| 管道符 | 从一个命令中读取输出并将其写入另一个命令的输入中 | echo Y| rd /s c:\abc | ||
组合符 &,&&,|| | & 符号无论命令是否正确执行,都依次执行各条命令 | dir z:\ & dir y:\ & dir c:\ | ||
&& 符号前一条命令执行正确后再执行下一条命令 | ||||
|| 前面的命令执行失败时才执行该符号后的命令 | tasklist | find /i "qq.exe" && taskkill /f /im qq.exe || echo 你开了QQ?我不信 | |||
^转义字符 | 转义字符echo ^>、echo ^|、echo ^|^|、echo ^^…… | |||
% 变量引导符 | 1、% 变量引用处理 2、形式参数的引用如%0、%1、%2...9%。%* 一次返回全部参数的值 3、出现在 set /a 语句中时,表示两数相除取余数,在批处理文件中,需要连续两个百分号,写成%% 4、转义符号:如果要显示%本身时,需要在前面用%来转义. | :%var%、%str% | ||
"" 界定符 | ①在表示带有空格或特殊符号的路径时常要用""来将路径括起来。 ②表示其中的内容是一个完整的字符串。 | cd /d cd "d:\program files\^%*abc" | ||
:标号 | 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容 | |||
有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别 | ||||
无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。 | ||||
, 逗号 | 逗号相当于空格 | dir,c:\ | ||
() 括号 | 括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行 | ( echo 1 echo 2 echo 3 ) | ||
! 感叹号 | 在变量延迟问题中,用来表示变量,即%var%应该表示为!var! | |||
; 分号 | 命令相同时,可以将不同目标用分号来隔离 | dir c:\;d:\;e:\;z:\ | ||
系统变量 | %ALLUSERSPROFILE% | 本地 返回“所有用户”配置文件的位置。 | ||
%APPDATA% | 本地 返回默认情况下应用程序存储数据的位置。 | |||
%CD% | 本地 返回当前目录字符串。 | |||
%CMDCMDLINE% | 本地 返回用来启动当前的 Cmd.exe 的准确命令行。 | |||
%CMDEXTVERSION% | 系统 返回当前的“命令处理程序扩展”的版本号。 | |||
%COMPUTERNAME% | 系统 返回计算机的名称。 | |||
%COMSPEC% | 系统 返回命令行解释器可执行程序的准确路径。 | |||
%DATE% | 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。 | |||
%ERRORLEVEL% | 系统 返回上一条命令的错误代码。通常用非零值表示错误。 | |||
%HOMEDRIVE% | 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 | |||
%HOMEPATH% | 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 | |||
%HOMESHARE% | 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。 | |||
%LOGONSERVER% | 本地 返回验证当前登录会话的域控制器的名称。 | |||
%NUMBER_OF_PROCESSORS% | 系统 指定安装在计算机上的处理器的数目。 | |||
%OS% | 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。 | |||
%PATH% | 系统 指定可执行文件的搜索路径。 | |||
%PATHEXT% | 系统 返回操作系统认为可执行的文件扩展名的列表。 | |||
%PROCESSOR_ARCHITECTURE% | 系统 返回处理器的芯片体系结构。值:x86 或 IA64 基于Itanium | |||
%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% | 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。 | |||
%TIME% | 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。 | |||
%USERDOMAIN% | 本地 返回包含用户帐户的域的名称。 | |||
%USERNAME% | 本地 返回当前登录的用户的名称。 | |||
%USERPROFILE% | 本地 返回当前用户的配置文件的位置。 | |||
%WINDIR% | 系统 返回操作系统目录的位置。echo %WINDIR%能显示一个变量的值 | |||
%0 | 指批处理文件名(包括路径)。(1)返回批处理所在绝对路径;(2)无限循环执行BAT | |||
%1 %2 %3 %4 %5 ......%9 | 批处理指令的形参 |