DOS批处理

一、 批处理

批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。目前比较常见的批处理包含两类:

  • PS批处理
  • DOS批处理

PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;
DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。
这里要讲的就是DOS批处理。

二、 DOS批处理

DOS批处理是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是command.com或者cmd.exe)解释运行。类似于Unix中的Shell脚本。
批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用ifforgoto等命令控制程序的运行过程,如同CBasic等高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。
批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或双击该批处理文件,系统会调用cmd.exe 运行该批处理程序。
一般情况下,每条命令占据一行;当然也可以将多条命令用特定符号(如:&,&&,|,||等)分割后写入同一行中;还有的情况就是像iffor等较高级的命令,则需要占据几行,几十行,几百行的空间。
系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错,意外退出。

注意

问题描述
批处理文件执行的过程中打印出来的中文乱码

原因
文件可能是 utf-8 编码,cmd 支持 ANSI 编码

解决方法
用【记事本】打开>【另存为】>【修改编码为: ANSI 】

三、 简单批处理命令

1. echo命令

**功能概述:**打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo【批处理与联机处理】

语法:

echo [{on|off}] [message]

Sample:@echo off / echo hello world

在实际应用中我们会把这条命令和重定向符号(也称管道符号,一般为 > 或者 >> 或者 ^)结合来实现输入一个命令到特定的文件中。

举例:

第一步:建立批处理文件

第二步:写代码

@echo off
echo hello world!
pause

第三步:保存

解释说明

 @echo off//关闭回显,如果没有这一句将会显示一些不必要的信息,比较碍眼
 echo hello world!//屏幕上显示hello world!
 pause

echo off 关闭回显(即批处理中的命令语句不会显示)

echo on 打开回显

@ 符号的意思是不显示它后面的命令语句,只显示命令执行的结果!

例如:

    echo 你好
    @echo 你好
显示结果为:
        echo 你好
        你好

总结:

echo命令的作用有两个,一个是在CMD上显示一行内容,如:echo 你好。还有一个作用是关闭命令的回显:echo off

我们在echo off命令前加一个“@”符号是为了不让echo off这条命令本身显示出来。

pause命令是暂停的意思,防止批处理执行完之后直接退出。

遇到不明白的命令,可以使用 命令/?来获取帮助。 例如:echo/?

2. Del命令

功能概述:删除文件

例如:del d:\lalala.txt 操作结果:删除d:\lalala.txt

del命令有几个重要的参数:

/p 删除文件之前进行确认

/F 强制删除文件

/S 从所有子目录删除指定文件

/Q 安静模式。删除全局通配符时,不要求确认

例如删除C盘下所有名为:lalala.txt的文件,且文件是只读的,改怎么办?

del /f /s c:\lalala.txt

综合应用:

@echo off
echo 正在清除系统垃圾,请稍后......
del /s /f /q %systemdrive%*.tmp >nu1 2>nul
del /s /f /q %systemdrive%*.gid >nu1 2>nul
del /s /f /q %systemdrive%*.chk >nu1 2>nul
del /s /f /q %systemdrive%*.old >nu1 2>nul
del /s /f /q "%systemdrive%local settings\temp\*.*" >nu1 2>nul
del /s /f /q "%systemdrive%recent\*.*" >nu1 2>nul
del /s /f /q "%systemdrive%cookies\*.*" >nu1 2>nul
echo 垃圾清理完毕!
echo. & pause

这是一个用来清除系统垃圾文件的批处理程序。%systemdrive%这些是系统变量,也就是系统目录的另一种表示形式而已。我们可以通过输入echo %systemdrive%来看看它代表的是系统中的哪个目录。*.tmp中 * 是一个通配符,它表示所有后缀名为.tmp为扩展名的文件。>nu1 2>nu1的意思是将命令执行时的信息或者错误全部给屏蔽掉。

3. cls命令

**功能概述:**执行该命令后,屏幕上所有信息都被清除,光标重新定位到屏幕左上角。

4. 注释

块注释:

REM为注释命令,一般用来给程序加上注解,该命令后的命令不被执行,但能回显。

::也可以起到rem的注释作用,且简洁高效,但有两点需要注意:

  1. 任何以冒号:开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容
  • 有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别
  • 无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto语句无法识别的标号,可以起到注释作用。

​ 所以::常常被用作注释符号,其实 :+ 也可以起到注释作用。

  1. 与rem不同的是,::后的字符行在执行时不会回显,无论是否用echo on打开命令行回显状态。因为命令解释器不认为他是一个有效的命令行,就此点来看,rem在某些场合下将比::更为适用;另外,rem可以用于 config.sys 文件中。

行内注释:

格式:%注释内容%

举例:

@Rem here is the 注释
::Rem here is the 注释

5. pause命令

功能概述:暂停命令,运行后,将显示下面的消息。

举例:

@echo off
:begin
copy d:\*.* c:\
echo 请插入另一张光盘...
pause
goto begin//将d盘下的所有文件复制到c盘

6. call命令

**功能概述:**call命令可以在批处理执行的过程中,调用另一个批处理,当另一个批处理执行完毕之后,再继续执行原来的批处理。

call command

调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行改字符串。

call [drive:] [path] filename [batch-parameters]

调用的其他批处理程序。filename参数必须具有.bat.cmd扩展名。

call :label arguments

调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头,以命令 goto:eof 结尾

另外,批处理文本参数按照(%0,%1,%2…等等)有如下改变:

批处理脚本里的 %* 指出所有的参数如(%1,%2,%3…)

批处理参数(%n)的替代已被增强:

%~1   -删除引号(``),扩充%1
%~f1  -将%1扩充到一个完全版合格的路径名
%~d1  -仅将%1扩充到一个驱动器号
%~p1  -仅将%1扩充到一个路径
%~n1  -仅将%1扩充到一个文件名
%~x1  -仅将%1扩充到一个文件扩展名
%~s1  -扩充的路径只含有短名
%~a1  -将%1扩充到文件属性
%~t1  -将%1扩充到文件的日期/时间
%~z1  -将%1扩充到文件的大小
%~$PATH:1  -查找列在PATH环境变量的目录,并将%1扩充到找到的第一个完全合格的名称,如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修订符来取得多重结果
%~dp1  -仅将%1扩展到驱动器号和路径
%~nx1  -仅将%1扩展到文件名和扩展名
%~dp$PATH:1  -在列在PATH环境变量中的目录里查找%1,并扩展到找到的第一个文件的驱动器号和路径。

在上面的例子中,%1和PATH可以被其他有效值替换。%语法被一个有效参数号码终止。%修订符不能跟%*使用。

注意:

参数扩充时不理会参数所代表的文件是否真的真实存在,均以当前目录进行扩展要理解上面的知识,下面的例子很关键。

@echo off
echo 产生一个临时文件 > tmp.txt
rem 下一行先保存当前目录,再讲c:\windows设为当前目录
pushd c:\windows
call :sub tmp.txt
rem 下一行恢复前次的当前目录
popd
call :sub tmp.txt
pause
del tmp.txt
exit
:sub
echo 删除引号:%~1
echo 扩充到路径:%~f1
echo 扩充到一个驱动器号:%~d1
echo 扩充到一个路径:%~p1
echo 扩充到一个文件名:%~n1
echo 扩充到一个文件扩展名:%~x1
echo 扩充的路径只含有短名:%~s1
echo 扩充到文件属性:%~a1
echo 扩充到文件的日期/时间:%~t1
echo 扩充到文件的大小:%~z1
echo 扩充到驱动器号和路径:%~dp1
echo 扩充到文件名和扩展名:%~nx1
echo.
goto :eof

例2:

set aa=123456
set cmdstr=echo %aa%
call %cmdstr%
pause

本例中如果不用call,则直接运行%cmdstr%,将显示结果%aa%,而不是123456.

7. start命令

**功能概述:**调用外部程序,所有的dds命令和命令行程序都可以由start命令来调用。

如:start calc.exe 既可打开Windows的计算器

常用参数:

MIN          -开始时窗口最小化
SEPARATE     -在分开的空间内开始16位Windows程序
HIGH         -在High优先级类别中开始应用程序
REAL TIME    -在REAL TIME优先级类别开始应用程序
WAIT         -启动应用程序并等待他的结束

执行的应用程序是32位GUI应用程序时,cmd.exe不等应用程序终止就返回命令提示。如果在命令脚本内执行,该行为不会发生。

例:

start explorer d:\
pause

调用图形界面打开D盘

8. goto命令

**功能概述:**跳转

在批处理中以“:XXX"来构建一个标号,然后用goto xxx来跳转到标号:XXX处,然后执行标号后的命令。

标签的名字可以随意起名,但是最好是有意义的字符串。goto命令就是根据这个冒号 :来寻找下一步跳转的位置。

例如:

@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 goto start
    pause

leq:作用相当于小于<号

输出:

1
2
3
4
按任意键退出

9. set命令

功能概述:

显示,设置或删除变量

  1. 显示变量:set或set s前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。

  2. 设置变量:set aa=abcd 此句命令即可定义新的变量aa,同时为变量aa赋予初始值abcd。

  3. 删除变量:set aa= 此句命令即可删除变量aa。若变量aa已经被定义,则删除变量aa;若aa尚未定义,则此句命令无实际意义。

用法:set[环境变量]=[字符串]

例子:

C:\>set blaster=a220 i5 d1    //设置声卡的参数
a:\>set path=c:\dos			 //path c:\dos含义相同

需要说明的是,批处理中的变量是不分类型的,不需要像c语言的变量中还有很多变量类型。

set命令具有拓展功能,如用作交互输入,字符串处理,数值计算等,属于高级命令范畴。

10. 批处理符号

@

该字符在批处理中的意思是关闭当前行的回显。我们已经知道echo off能够关闭整个批处理命令的回显,但不能关掉echo off这个命令,现在我们在echo off这个命令前加个@,就可以达到所有命令均不回显的要求。

echo off
dir d:\
pause
@echo off
dir d:\
pause

>

该字符的意思是传递并覆盖,它所起的作用是将所运行的回显结果传递到后面的范围(后边可以是文件,也可以是系统控制台)

比如

文件1.txt的文件内容是:1+1

使用命令:dir *.txt > 1.txt //寻找该盘下的所有.txt结尾文件信息并将相关信息放在1.txt中

这时候1.txt的内容如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogKBNISX-1654856769236)(C:\Users\GW00293587\AppData\Roaming\Typora\typora-user-images\image-20220610112104873.png)]

>>

功能概述:该符号是将内容追加到文件末尾的意思。(>是从头开始覆盖)

|

功能概述:管道传输,将上一个命令执行的结果传到下一个命令去处理

例如:

dir c:\|find "txt"
pause

以上命令是:查找C盘所有文件,并检索格式为.txt的文件。find的功能可以使用find /?去查看。

在不使用format的自动格式化参数时,如何自动格式化c盘:

echo y|format c: /s /q /v:system

使用过format再格式化时,要输入y来确认是否格式化硬盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令,从而达到自动输入y的目的。

^

功能概述:该符号是对特殊符号 “<” ,“>”,“&”的前导符号,在命令中他将以上3个字符的特殊功能去掉,仅仅只把他们当成符号而不使用。

比如:

echo test ^>1.txt

运行结果为:

他没有追加在1.txt里,只是显示了出来。

&

该符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后面的命令执行。

比如:

dir z:\ & dir y:\ & dir c:\

以上命令会连续显示在Z,Y,C盘的内容,不理会该盘是否存在

&&

该命令和上面的类似,但区别是,第一个命令失败时,后面的命令也不会执行。

dir z:\ && dir y:\ && dir c:\

“”

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法

cd "program files"
cd progra~1
cd pro*

以上三种方法都可以进入 program file 这个目录

,

**功能概述:**逗号相当于空格,在某些情况下","可以用来做空格使用。

比如

dir,c:\

;

**功能概述:**当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序还会执行。

比如:

dir c:\;d:\;e:\;f:\

以上命令相当于

dir c:\
dir d:\
dir e:\
dir f:\

四、复杂批处理命令

1. 文件夹管理

cd: 显示当前目录名或者改变当前目录

md: 创建目录

rd: 删除一个命令

dir: 显示目录中的文件和子目录列表

tree: 以图形显示目录结构

path: 为可执行文件显示或设置一个搜索路径

xcopy: 复制文件和目录树

cd

进入某目录: cd name

一次性进入: cd name1\name2\name

返回上一层: cd … //两个点表示上一级,一个点表示当前目录

直接返回根目录: cd \ // \就代表根目录

md

格式:md name1 name2

rd

  1. 删除的目录不能有子目录
  2. 删除的目录不能有文件
  3. 不能删除当前目录
  4. 根目录不能删除

tree

**功能概述:**显示命令树结构

格式:tree 路径

tree /f 路径名 :显示目录时显示文件名

tree /a 以 ascll 码显示目录树

path

在DOS下,如果我们要执行某exe文件,电脑会在磁盘上寻找这个文件,如果不经过特殊处理,它只在当前目录下寻找,如果没有找到则提示出错。换句话说,在执行某文件之前,都要先转换到该目录下,显然:此举有点浪费时间。

path命令则可以解决此问题。如果在path命令中定义了某个目录,那么在任何目录下,都可以直接执行path中指定目录的文件。

格式:path 路径名1;路径名2;路径名3

例如:

path=c:\dos;c:\windows;c:\

执行结果:当我们执行一个文件时,电脑会现在当前目录下查找这个文件,找到则执行,如果没有找到,则电脑按照path命令所指定的目录顺序去查找,现在c盘的dos目录下,然后在windows目录下,最后在c盘根目录下寻找这个文件。

xcopy

功能概述: 拷贝目录和文件

适用场合:在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比copy命令快

用法:

xcopy    文件名     目录          将指定文件拷贝到指定目录
xcopy    源目录    目的目录        将源目录连同子目录一同拷贝到目的目录下
Xcopy     *.*     目的目录  /s    将文件与非空子目录拷贝到指定目录
Xcopy     *.*     目的目录  /e    将文件与子目录拷贝到指定目录(包含空目录)

2. 文件管理

type 显示文本文件的内容
copy 将一份或多份文件复制到另一个位置
del  删除一个或数个文件
move 移动文件并重命名文件和目录。(Windows xp Home Edition中没有)
ren 重命名文件

type

格式:type name

type a.txt

copy

例:现有一叫做a.txt的文件,copy a.txt a.exe之后就会又生成一个叫做 a.exe 的文件

copy c:\.bat d:\zhang

结果:复制c盘下所有后缀名为.bat的文件到d盘zhang文件夹下。

del

**功能概述:**删除文件

del a.bat
del *.tmp

move

**功能概述:**移动文件

格式:move 原文件名 目的目录

ren

**功能概述:**修改文件名

格式:ren 源文件名 目的文件名

3.网络命令

ping   进行网络连接测试,名称解析
ftp    文件传输
net    网络命令集及用户管理
telnet 远程登录
ipconfig  显示,修改网络设置
msg  给用户发送消息
arp  显示,修改局域网的IP地址

ping

**功能概述:**进行网络连接测试,名称解析

ftp

功能概述: 文件传输

格式:

ftp-v-d-i-n-g 主机名,其中
-v 显示远程服务器的所有响应信息;
ftp -n -s:路径名  filename

net

**功能概述:**网络命令集及用户管理

net share -查看共享命令

net share ipc$ -设置ipc$共享

net share c$=c: -设置c盘为共享

net user -查看本地的用户列表

net user 用户名 密码 /add 增加一个用户

net user 用户名 /增加一个用户,密码为空

telnet

**功能概述:**远程登录

telnet 主机名/ip //ip为要连接的远程机的主机名或ip地址。

一旦telnet成功地连接到远程系统上,就显示登录信息并提示用户输入用户名和口令。如果用户名和命令输入正确,就能成功登录并在远程系统上工作。在telnet提示符后面可以输入很多命令,用来控制telnet会话过程,在telnet联机帮助手册中对这些命令有详细的说明。

ipconfig

**功能概述:**显示,修改网络设置

msg

**功能概述:**将消息发送给用户

MSG {username | sessionname | sessionid | @filename | *} [/SERVER:servername] [/TIME:seconds] [/V] [/W] [message]

username 标识指定的用户名。
sessionname 会话名。
sessionid 会话 ID。
@filename 识别这样一个文件,该文件含有将所发消息发送到的用户名、会话名和会话标识号的列表。

  •               给指定服务器上的所有会话发送信息。
                    /SERVER:servername  要联系的服务器(默认值是当前值)。
                    /TIME:seconds       等待接收器确认消息的时间延迟。
                    /V                  显示有关执行的操作的信息。
                    /W                  等待用户的响应,跟 /V 一起有用。
                    message             要发送的消息。如果没有指定,发出提示,或者从 stdin读取。
    

4. 系统管理

at              -安排在特定日期和时间运行命令和程序
shutdown        -立即或定时关机或重启
taskkill        -结束进程
tasklist        -显示进程列表
reg             -注册表控制台工具

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值