dir #显示当前目录中的文件和子目录
dir /a #显示当前目录中的文件和子目录,包含隐藏文件和系统文件
dir c: /a:d #显示当前目录中的目录
dir c: /a:-d #显示当前目录中的文件
dir c: /b/p #b显示文件名,p分页显示
dir *.exe /s #显示当前目录和子目录的所有exe文件
目录操作及文件:cd/md/rd
cd /d D:\
md d:\a\b\c #如果不存在将自动创建中级目录
rd abc #删除当前目录里的abc子目录,要求为空目录
rd /s/q d:\temp #删除文件夹及其子文件夹和文件,q指示为安静模式
del d:\test.txt #删除指定文件不能是隐藏、系统、只读文件
del /q/a/f d:\temp\*.* #删除temp文件夹里的所有文件,包含隐藏、只读、系统文件,不包含子目录
del /q/a/f/s d:\temp\*.* #同上,同时删除子文件夹里的文件,不包含子目录
set #显示目前所有可用的变量,包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2
echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2
echo %p:~0,3% #显示前3个字符,即aa1
echo %p:~-2% #显示最后面的2个字符,即b2
echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo %p:bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
set p=%p:bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #设置p为数值型变量,值为39
set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用
set /a p=”1&0″ #”与”运算,要加引号。其它支持的运算符参见set/?
set p= #取消p变量
set /p p=请输入 #屏幕上显示”请输入”,并会将输入的字符串赋值给变量p,注意可以用来取代 choice 命令
15. for循环命令
这个比较复杂,请对照 for/? 来看
for %%i in (c: d: e: f:) do echo %%i
依次调用小括号里的每个字符串,执行 do 后面的命令
注意%%i,在批处理中 for 语句调用参数用2个%
默认的字符串分隔符是"空格键","Tab键","回车键"
for %%i in (.txt) do find "abc" %%i
对当前目录里所有的txt文件执行 find 命令
for /r . %%i in (.txt) do find "abc" %%i
在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行
for /r . %%i in (.) do echo %%~pni
显示当前目录名和所有子目录名,包括路径,不包括盘符
for /r d:mp3 %%i in (.mp3) do echo %%i>>d:mp3.txt
把 d:mp3 及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1
for /f %%i in ('set') do echo %%i
对 set 命令的输出结果循环调用,每行一个
for /f "eol=P" %%i in ('set') do echo %%i
取 set 命令的输出结果,忽略以 P 开头的那几行
for /f %%i in (d:mp3.txt) do echo %%i
显示 d:mp3.txt 里的每个文件名,每行一个,不支持带空格的名称
for /f "delims=" %%i in (d:mp3.txt) do echo %%i
显示 d:mp3.txt 里的每个文件名,每行一个,支持带空格的名称
for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a
对 dir 命令的结果,跳过前面5行,余下的每行取第4列
每列之间的分隔符为默认的"空格"
可以注意到 dir 命令输出的前5行是没有文件名的
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)
对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和"空格",注意 delims=- 后面有个"空格"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的
for /f "tokens=2 delims=- " %%a in ('date /t') do echo %%b
取第2列给 %%a ,其后的列都给 %%b
16. 其他
title 标题 #设置cmd窗口标题
cls #清屏
ver #显示系统版本
vol #显示卷标
label #显示卷标,同时提示输入新卷标
pause #暂停命令
rem #注释命令,注释不执行操作
:: #注释命令,注释不执行操作
start #批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令
call #批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行
choice #选择命令,让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……
本文整理了工作中常用的批处理命令,汇总后可以便于查找和提高工作效率。
批处理
批处理是一系列DOS命令,通常用于自动执行重复性任务。批处理也称为批处理脚本,就是对某个对象进行批量处理,批处理文件扩展名为bat/cmd。批处理类似于Unix系统中的shell脚本。
批处理的常见规则如下:
常用命令
文件夹管理
文件管理
网络命令
系统管理
常用命令和解析
回显命令:echo和@
错误码
显示文件夹内容:dir
目录操作及文件:cd/md/rd
拷贝文件:copy
时间日期
跳转命令:goto和:
外部命令
逻辑命令和管道命令:&、&&、||和|
输出重定向:>和>>,主要将本来显示在屏幕上的内容输出到指定文件,若文件不存在则自动创建
输入信息重定向:<,从文件中获得输入信息而不是屏幕上,用于data time lable等需要等待输入的命令
命令行传递给批处理的参数:%0、%1、%*
set #显示目前所有可用的变量,包括系统变量和自定义的变量 echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用 set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1 set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2 echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2 echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2 echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2 echo %p:~0,3% #显示前3个字符,即aa1 echo %p:~-2% #显示最后面的2个字符,即b2 echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2 echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2 echo %p:bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2 set p=%p:bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2 set /a p=39 #设置p为数值型变量,值为39 set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3 set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用 set /a p=”1&0″ #”与”运算,要加引号。其它支持的运算符参见set/? set p= #取消p变量 set /p p=请输入 #屏幕上显示”请输入”,并会将输入的字符串赋值给变量p,注意可以用来取代 choice 命令
这个比较复杂,请对照 for/? 来看 for %%i in (c: d: e: f:) do echo %%i 依次调用小括号里的每个字符串,执行 do 后面的命令 注意%%i,在批处理中 for 语句调用参数用2个% 默认的字符串分隔符是"空格键","Tab键","回车键" for %%i in (.txt) do find "abc" %%i 对当前目录里所有的txt文件执行 find 命令 for /r . %%i in (.txt) do find "abc" %%i 在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行 for /r . %%i in (.) do echo %%~pni 显示当前目录名和所有子目录名,包括路径,不包括盘符 for /r d:mp3 %%i in (.mp3) do echo %%i>>d:mp3.txt 把 d:mp3 及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去 for /l %%i in (2,1,8) do echo %%i 生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1 for /f %%i in ('set') do echo %%i 对 set 命令的输出结果循环调用,每行一个 for /f "eol=P" %%i in ('set') do echo %%i 取 set 命令的输出结果,忽略以 P 开头的那几行 for /f %%i in (d:mp3.txt) do echo %%i 显示 d:mp3.txt 里的每个文件名,每行一个,不支持带空格的名称 for /f "delims=" %%i in (d:mp3.txt) do echo %%i 显示 d:mp3.txt 里的每个文件名,每行一个,支持带空格的名称 for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a 对 dir 命令的结果,跳过前面5行,余下的每行取第4列 每列之间的分隔符为默认的"空格" 可以注意到 dir 命令输出的前5行是没有文件名的 for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do ( echo %%a echo %%b echo %%c ) 对 date /t 的输出结果,每行取1、2、3列 第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列 分隔符指定为 - 和"空格",注意 delims=- 后面有个"空格" 其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的 for /f "tokens=2 delims=- " %%a in ('date /t') do echo %%b 取第2列给 %%a ,其后的列都给 %%b
title 标题 #设置cmd窗口标题 cls #清屏 ver #显示系统版本 vol #显示卷标 label #显示卷标,同时提示输入新卷标 pause #暂停命令 rem #注释命令,注释不执行操作 :: #注释命令,注释不执行操作 start #批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令 call #批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行 choice #选择命令,让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……
@ECHO OFF
Rd "%WinDir%\system32\test_permissions" >NUL 2>NUL Md "%WinDir%\System32\test_permissions" 2>NUL||(Echo 请使用右键管理员身份运行!&&PAUSE >NUL&&EXIT) Rd "%WinDir%\System32\test_permissions" 2>NUL
@echo off echo ---------------------------------------------------- echo Press any key to delete all files with ending: echo .aps .idb .ncp .obj .pch .tmp *.sbr echo Visual c++/.Net junk echo ----------------------------------------------------
del /F /Q /S .aps .idb .ncp .obj .pch .sbr .tmp .bsc .ilk .res .ncb .opt .suo .manifest *.dep
mklink /D E:\dev\intermediate "F:\cache\build\dev"
cd /d "%~dp0"