批处理

∥☆過路亽.° 提交于 2019-11-28 07:16:29

批处理

echo

输出文字

例子 结果
@echo off 关闭回显
echo. 回车
echo Y|rd /s c:\abc 用rd 命令删除时,自动输入Y确认
echo 123>myfile.txt 新建文件,将123输入进去,如果有文件,覆盖

rem ::

注释

rem 在某些场合下将比 :: 更为适用

cd

目录切换

例子 结果
cd… 返回到上一层目录
cd\ 返回根目录
cd. 当前目录
cd /d d:\123\abc 切换到D:\123\abc
echo 当前路径是 %cd% 显示当前的完整路径,一般用通过 %cd% 加以引用。

dir

列文件名

例子 结果
dir /p c:\windows 即列出一屏的目录

attrib

设置文件属性

del

删除命令

例子 结果
del d:\abc.txt 删除abc.txt文件
del /p d:\123\*.* /P 删除每一个文件之前提示确认。
del /s e:\test\123\*.* /S 从所有子目录删除指定文件。确认一次删除一个目录的文件。
del /s /q e:\test\123*.* 安静模式,删除目录和子目录下所有文件

copy

只能复制文件,不能复制文件夹。

例子 结果
copy e:\test\123\123.txt e:\test\ 复制的源文件 文件复制的目标路径
copy e:\test\123\123.txt e:\test\abc.bat 复制文件,并修改文件名和格式
copy e:\test\123 e:\test 批量复制文件
copy e:\test\123\*.txt e:\test /y 仅批量复制.txt 文件
通过参数/y,无须确认直接覆盖。

xcopy

复制文件和目录树。

例子 结果
xcopy e:\test\123 e:\test 复制目录下所有文件
xcopy /s e:\test\123 e:\test 复制目录下所有文件(夹),不包括空的子目录。
xcopy /e e:\test\123 e:\test 复制目录下所有文件(夹),包括空的子目录。
/h 复制隐藏或系统的文件
/t 只复制子目录结构(即目录树),不复制文件。
要复制空目录,必须包含 /e 选项。
/y 禁止提示您确认要覆盖现存的目标文件。

md

创建文件夹

例子 结果
md e:\test\abc 创建abc的文件夹
md abc 缺省,则当前当前目录下创建abc文件夹
md “e:\test\abc game” 包含有空格或是特殊符号的,一定要用双引号” “把文件夹名括起来。
md abc e:\test\gmae\123 abcd 当前目录下建立abc和abcd两个文件,同时e:\test\gmae下也建立一个文件夹123。

rd

删除文件夹

例子 结果
rd e:\test\abc 在不加任何参数时,只能删除空的文件夹。
rd /s e:\test\abc 如果文件夹不为空,则通过/S参数,可删除文件夹和文件。
rd /s /q e:\test\abc 安静模式,带 /S 删除目录树时不要求确认。

ren

重命名文件(夹)

例子 结果
ren e:\test\123.txt 123456.bat 单个文件的重命名
ren e:\test*.txt *.bat 批量更改为后缀

move

移动文件(夹)

缺省路径情况下默认为当前目录。

例子 结果
move e:\test\000.txt e:\test\123 000.txt文件移动到123文件夹中
move e:\test\000.txt e:\test\333.txt 重命名
/y 安静模式

find

在文件中搜索字符串。

例子 结果
find “abc” d:\abc.txt 在abc.txt 中找abc
find /i “abc” d:\abc.txt 忽略大小写
find /n “abc” d:\abc.txt 显示行号
find /c “abc” d:\abc.txt 字符串的个数
find /v “abc” d:\abc.txt 查找不包含"abc"字符串的行

findstr

字符串查找增强

例子 结果
findstr “icq” d:\abc.txt 查找包含有“icq”这三个字符串的行。
findstr /i “icq” d:\abc.txt 不区分大小写
findstr /r “icq msn” d:\abc.txt 查找包含有 “icq”或“msn”的行,查找的多个字符串间用空格隔格开。
findstr /s “msn” d:\*.txt 在当前目录和所有子目录中的txt文件中搜索字符串"msn"
findstr /c:“icq msn” d:\abc.txt 查找包含有 “icq msn”这几个字符的行
注意,这里“icq msn”是一整体的。

findstr 命令中正则表达式的用法规则

意义
. 通配符: 任何字符
* 重复: 以前字符或类别出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
[class] 字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\<xyz 字位置: 字的开始
xyz\> 字位置: 字的结束

正则举例:

举例 结果
findstr .* d:\abc.txt 查找任意字符,包括空行,换行。
findstr ac* d:\abc.txt 查找出现一个“a”字符串,以及a后面出现过0次或者任意次c的字符行。
例如:abc,ac,acc,a
findstr ak5* d:\abc.txt 查找出现一个“ak”字符串,以及ak后面出现过0次或者任意次5的字符行。
findstr “^step” d:\abc.txt 查找行首为step字符串的行。一定要加“ ”,不然不准确
findstr “step$” d:\abc.txt 查找行尾为step字符串的行。
findstr “[0-9]” d:\abc.txt 查找数字0-9的任意之一的行。
findstr “[a-zA-Z]” d:\abc.txt 查找包括任意字母行。
findstr “[abcezy]” d:\abc.txt 查找包括a b c e z y其中任意一字母的行。
findstr “[a-fl-z]” d:\abc.txt 查找小写字符a到f 或l到z的任意一字母的行,但不包含g h I j k这几个字母。
findstr “M[abc][123]Y” d:\abc.txt 查找可以匹配 Ma1Y , Mb1Y, Mc1Y; Ma2Y , Mb2Y, Mc2Y; Ma3Y , Mb3Y, Mc3Y的行。
findstr “[^0-9]” d:\abc.txt 过滤(不显示)纯数字,不能有空格
findstr “[^a-z]” d:\abc.txt 过滤(不显示)纯字母,不能有空格
findstr “[^add]” d:\abc.txt 过滤仅含有由a d d三个字母组成的纯字母字符串的行。
findstr “\<echo” d:\abc.txt 所有含有以echo为前缀的字符串的行,都匹配。
findstr “echo>” d:\abc.txt 所有含有以echo为后缀的字符串的行,都匹配。
findstr “<end>” d:\abc.txt 用来精确查找单词,查找单词end的行。
findstr “.abc” d:\abc.txt 查找可以匹配“.abc”字符串的行,这里 \. 是把 . 给转义了。
findstr “1\” d:\abc.txt 查找可以匹配“1\”字符串的行,这里\\是把\给转义了。

问题:

为什么最后缺少一个换行符号,就找不到了?

shutdown

例子 结果
shutdown -l 注销本机用户,对远程计算机不适用。
at 12:00 shutdown -s 通过-s参数,在12:00执行关闭计算机。
shutdown -r -t 60 60秒后重启计算机。设置重启倒计时为60秒。如果没有设置时间则默认为30秒。
shutdown -f -s -t 300 通过-f参数强制计算机300秒后关闭。
shutdown -a 终止当前的关机进程,可以避免关机而造成的损失。

pause

按任意字符继续……

>、>>

重定向符, 意思是传递并且覆盖,它所起的作用是将运行的结果传递到后面的范围

(后边可以是文件,也可以是默认的系统控制台,即命令提示符)。

例子 结果
echo hello120 >1.txt
(echo hello120)>1.txt
>1.txt echo hello120
>1.txt <nul set /p=hello120
1.txt set /p=hello120<nul
新建立文件 1.txt,内容为”hello120”

>> 重定向符

将命令的输出结果追加到其后面的设备中去。

例子 结果
echo world>>1.txt 传递并在文件的末尾追加

|

命令管道符:

表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,

简而言之,就是把它之前的输出作为它之后的输入。

例子 结果
echo Y|rd /s e:\test\gmae 通过管道命令|将echo y 的结果传给命令,从而达到自动输入y 的目的。

&、&&、||

组合命令:

可以把多个命令组合起来当一个命令来执行。

&符号允许同时执行多条命令,当第一个命令执行失败了,也不影响后边的命令执行。

&&符号允许同时执行多条命令,当碰到执行出错的命令后将不再执行后面的命令。

||符号允许同时执行多条命令,当一条命令执行失败后才执行第二条命令。

例子 结果
dir z:\ & dir y:\ & dir c:\ 以上命令会连续显示z,y,c 盘的内容,不理会该盘是否存在。
dir z:\ && dir y:\ && dir c:\ 前一个命令执行失败时,后边的命令就不会再执行了。
tasklist|find /i “qq.exe” && taskkill /f /im qq.exe ||echo 你开了QQ?我不信 第一个命令::tasklist
第二个命令:taskkill /f /im qq.exe
第三个命令:echo 你开了QQ?我不信

管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令。

| >,>> &、&&、||

^

转义字符

例1
@echo off
echo 这是^
一个^
句子
Pause

为什么转义字符放在行尾可以起到续行符的作用呢?

每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。

%

①当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%、%str%

②另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如%0、%1、%2 。。。

%0 表示批处理文件本身,包括完整的路径和扩展名
%1至%9 表示第一个参数至第九个参数

③出现在 set /a 语句中时,表示两数相除取余数,也就是所谓的模运算,它在命令行窗口和批处理文件中的写法

④转义符号:如果要显示%本身时,需要在前面用%来转义。

“”

①在表示带有空格或特殊符号的路径时常要用""来将路径括起来。

②表示其中的内容是一个完整的字符串。

if

基本语法 意义
判断两个字符串是否相等 if “字符串1”==“字符串2” command 语句;
判断两个数值是否相等 if 数值1 equ 数值2 command 语句;
判断判断驱动器,文件或文件夹是否存在 if exist filename command 语句;
判断变量是否已经定义 if defined 变量 command 语句;
判断上个命令的返回值 if errorlevel 数值 command 语句。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!