暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tutorialspoint 批处理教程

原创 yBmZlQzJ 2023-08-20
2407

Tutorialspoint 批处理教程

来源:易百教程

批处理教程™

批处理脚本存储在简单的文本文件中,其中包含按顺序依次执行的命令。 脚本是一种可以通过自动化这些命令序列,用来减轻重复执行命令的方法,以便让自动化工作更容易和更高效。 本教程将讨论学习批处理脚本的基本功能以及相关示例,以便于理解。

面向读者

本教程已经为初学者准备了解批处理脚本的基本概念。

前提条件

如果有计算机程序设计和概念,例如变量,命令,语法等是将对学习本教程有帮助。

问题反馈

我们不能保证您在学习此批处理教程 的过程中不会遇到任何问题。本教程中的讲解,示例和代码等只是根据作者的理解来概括写出。由于作者水平和能力有限,因此不保正所有编写的文章都准确无误。但是如果有遇到任何错误或问题,请反馈给我们,我们会及时纠正以方便后续读者阅读。


开始学习 >> :批处理简介

批处理简介 - 批处理教程™

批处理脚本是为了自动执行重复的命令序列。脚本是一种可以通过自动化这些命令序列来减轻这种重复性工作的方法,以便让工作更容易和更高效。 在大多数组织中,批处理脚本以某种方式被合并,以实现自动化。

批处理脚本的一些功能有 -

  • 可以读取用户的输入,以便进一步处理。
  • 有控制结构:for, if, while 和 switch更好的自动化和脚本。
  • 支持高级功能,如函数和数组。
  • 支持正则表达式。
  • 可以包含其他编程代码,如Perl。

批处理脚本的一些常见用途是 -

  • 为不同的目的设置服务器。
  • 自动管理活动和日志,如删除不需要的文件或日志文件。
  • 自动将应用程序从一个环境部署到另一个环境。
  • 立即在各种机器上安装程序。

批处理脚本存储在简单的文本文件中,其中包含的命令按顺序依次执行。 这些文件具有特殊的扩展名BAT或CMD。 这种类型的文件通过称为命令解释器的系统文件提供的接口(有时称为shell)来识别和执行。 在Windows系统上,这个解释器被称为cmd.exe。

运行批处理文件是一个简单的事情,只需双击它即可。 批处理文件也可以在命令提示符或“开始 - 运行”行中运行。 在这种情况下,除非文件的路径位于路径环境中,否则必须使用完整的路径名称。 以下是一个批处理脚本的简单示例。 运行此批处理脚本将删除当前目录中的所有文件。

:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR

执行效果如下 -

F:\test>DEL . DR
F:\test\*, 是否确认(Y/N)? y

F:\test>dir
驱动器 F 中的卷是 Others
卷的序列号是 0007-6F29

F:\test 的目录

2018/01/16 17:58 <DIR> .
2018/01/16 17:58 <DIR> ..
2018/01/16 17:57 <DIR> dir
0 个文件 0 字节
3 个目录 51,510,300,672 可用字节


批处理执行环境 - 批处理教程™

本章介绍与批处理脚本相关的环境。

编写和执行

通常,要创建批处理文件,可以使用记事本或Ediplus之类的文本编辑器。 这是创建批处理文件的最简单的工具。 接下来是批处理脚本的执行环境。 在Windows系统上,这是通过命令提示符或cmd.exe来完成。 所有批处理文件都在此环境中运行。

以下是启动cmd.exe的两种方法 -

方法1 - 转到C:\Windows\System32并双击cmd.exe文件。如下图所示 -
5f92e71e8344126a7c75fa99a0b77858.jpg

方法2 - 通过运行命令 - 以下图片显示在Windows 10上查找命令提示符(cmd.exe)。
6ad0f3fa06bce8e1e44f347ea52e658d.jpg

当cmd.exe启动,将看到以下屏幕。这是执行批处理脚本的环境。
d6fb31ac96947269b047d3a7b93a0cb2.jpg


批处理命令 - 批处理教程™

在本章中,我们来看一看一些经常使用的批处理命令。如下图中所示 -

编号

命令

描述

1

VER

此批处理命令显示正在使用的MS-DOS的版本。

2

ASSOC

这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联。

3

CD

此批处理命令用于更改进入不同的目录,或显示当前目录。

4

CLS

这个批处理命令清除屏幕。

5

COPY

此批处理命令用于将文件从一个位置复制到另一个位置。

6

DEL

这个批处理命令用于删除文件而不是目录。

7

DIR

该批处理命令列出目录的内容。

8

DATE

这个批处理命令用于查找系统日期。

9

ECHO

此批处理命令显示消息,或打开或关闭命令回显。

10

EXIT

这个批处理命令退出DOS控制台。

11

MD

这个批处理命令在当前位置创建一个新的目录。

12

MOVE

这个批处理命令在目录之间移动文件或目录。

13

PATH

此批处理命令显示或设置路径变量。

14

PAUSE

该批处理命令会提示用户并等待输入一行。

15

PROMPT

此批处理命令可用于更改或重置cmd.exe提示符。

16

RD

这个批处理命令删除目录,但目录需要是空的才能被删除。

17

REN

重命名文件和目录

18

REM

此批处理命令用于批处理文件中的备注,防止执行备注的内容。

19

START

该批处理命令在新窗口中启动程序,或打开文档。

20

TIME

该批处理命令设置或显示时间。

21

TYPE

该批处理命令将文件或文件的内容打印到输出中。

22

VOL

此批处理命令显示卷标。

23

ATTRIB

显示或设置当前目录中的文件的属性

24

CHKDSK

这个批处理命令检查磁盘是否有问题。

25

CHOICE

这个批处理命令为用户提供了一个选项列表。

26

CMD

此批处理命令将调用另一个命令提示符实例。

27

COMP

该批处理命令根据文件大小比较2个文件。

28

CONVERT

此批处理命令将卷从FAT16或FAT32文件系统转换为NTFS文件系统。

29

DRIVERQUERY

此批处理命令显示所有已安装的设备驱动程序及其属性

30

EXPAND

此批处理命令从压缩的.cab压缩文件中提取文件。

31

FIND

该批处理命令在文件或输入中搜索字符串,输出匹配的行。

32

FORMAT

此批处理命令将磁盘格式化为使用Windows支持的文件系统(如FAT,FAT32或NTFS),从而覆盖磁盘的先前内容。

33

HELP

该批处理命令显示Windows提供的命令的列表。

34

IPCONFIG

此批处理命令显示Windows IP配置。显示连接的配置和连接的名称。

35

LABEL

此批处理命令添加,设置或删除磁盘标签。

36

MORE

此批处理命令一次显示一个或多个文件的内容。

37

NET

根据使用的命令提供各种网络服务。

38

PING

这个批处理命令通过网络将ICMP/IP “回显”发送到指定的地址的包。

39

SHUTDOWN

该批处理命令关闭计算机,或者注销当前用户。

40

SORT

该批处理命令从源文件获取输入,并按字母顺序排序其内容,从A到Z或从Z到A。它将在控制台上打印输出。

41

SUBST

此批处理命令将驱动器号分配给本地文件夹,显示当前分配或删除分配。

42

SYSTEMINFO

该批处理命令显示计算机及其操作系统的配置。

43

TASKKILL

该批处理命令结束一个或多个任务。

44

TASKLIST

此批处理命令列出任务,包括任务名称和进程标识(PID)。

45

XCOPY

这个批处理命令以更高级的方式复制文件和目录。

46

TREE

该批处理命令将当前目录的所有子目录的树显示为递归或深度的任何级别。

47

FC

这个批处理命令列出了两个文件之间的实际差异。

48

DISKPART

此批处理命令显示和配置磁盘分区的属性。

49

TITLE

该批处理命令设置控制台窗口中显示的标题。

50

SET

显示当前系统上的环境变量列表。


批处理VER命令 - 批处理教程™

批处理VER命令用于显示正在使用的MS-DOS的版本。

语法

ver

示例

将以下代码保存在文件:ver.bat 中,如下所示 -

@echo off
ver

上述命令的输出如下(版本号取决于您正在使用的操作系统)。

F:\worksp\batch_script>ver.bat

Microsoft Windows [版本 10.0.16299.125]


批处理ASSOC命令 - 批处理教程™

这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联。

语法

assoc – Displays all the file extensions
assoc | find “.ext” – Displays only those file extensions which have the extension ext.

示例

将以下代码保存在文件:assoc.bat 中,如下所示 -

@echo off
assoc > F:\worksp\batch_script\lists.txt
assoc | find ".doc" > F:\worksp\batch_script\listsdoc.txt

文件关联列表将定向输出到文件lists.txt。 以下输出显示了运行上述批处理文件后,listsdoc.txt文件中的内容。

F:\worksp\batch_script>ver.bat

listsdoc.txt文件中的内容 -

.doc=Word.Document.8
.dochtml=wordhtmlfile
.docm=Word.DocumentMacroEnabled.12
.docmhtml=wordmhtmlfile
.docx=Word.Document.12
.docxml=wordxmlfile


批处理CD命令 - 批处理教程™

批处理CD命令用于更改不同的目录,或显示当前目录。

语法

cd

示例

以下示例显示了如何以各种方式使用cd命令。

@echo off
Rem The cd without any parameters is used to display the current working directory
cd
Rem Changing the path to Program Files
cd \Program Files
cd
Rem Changing the path to Program Files
cd %USERPROFILE%
cd
Rem Changing to the parent directory
cd ..
cd
Rem Changing to the parent directory two levels up
cd ..\..
cd

上述命令将在更改到各个文件夹位置后显示以下输出。

C:\Users\Administrator
C:\Program Files
C:\Users\Administrator
C:\Users
C:\


批处理CLS命令 - 批处理教程™

批处理CLS命令用于更改不同的目录,或显示当前目录。

语法

cls

示例

以下示例显示了如何以各种方式使用cls命令。

@echo off
dir
Cls

命令提示符屏幕将被清除。


批处理COPY命令 - 批处理教程™

批处理COPY命令用于将文件从一个位置复制到另一个位置。

语法

Copy [source] [destination]

这些文件将从源(source)复制到目标(destination)位置。

示例

以下示例显示了复制命令的不同变体。

@echo off
cd
Rem Copies lists.txt to the present working directory.
Rem If there is no destination identified , it defaults to the present working directory.
copy c:\lists.txt
Rem The file lists.txt will be copied from C:\ to C:\tp location
copy C:\lists.txt c:\tp
Rem Quotation marks are required if the file name contains spaces
copy “C:\My File.txt”
Rem Copies all the files in F drive which have the txt file extension to the
current working directory copy
F:\*.txt
Rem Copies all files from dirA to dirB. Note that directories nested in dirA will not be copied
copy C:\dirA dirB

所有操作都按照批处理文件中的注释执行。


批处理DEL命令 - 批处理教程™

批处理DEL命令用于删除文件,但不删除目录。

语法

del [filename]

示例

以下示例显示了del命令的不同变体。

@echo off
Rem 删除`C:\`中的文件`lists.txt`
del C:\lists.txt
Rem 在所有嵌套目录中递归删除所有文件
del /s *.txt
Rem 在所有嵌套目录中递归删除所有文件,但要求用户的确认
Del /p /s *.txt

所有操作都按照批处理文件中的注释执行。


批处理DIR命令 - 批处理教程™

批处理DIR命令用于列出目录的内容。

语法

dir

示例

以下示例显示了dir命令的不同变体。

@echo off
Rem 所有从C:\目录列表将重定向输出到文件lists.txt
dir C:\ > C:\lists.txt
Rem 递归列出所有目录和子目录
dir /s
Rem 以递归方式列出目录和所有子目录的内容,每行文件,显示每个列出的文件或目录的完整路径。
dir /s /b
Rem 列出所有扩展名为 .txt 的文件。
dir *.txt
Rem 包括列表中的隐藏文件和系统文件。
dir /a
Rem 仅列出隐藏的文件。
dir /ah

所有操作都按照批处理文件中的注释执行。


批处理Date命令 - 批处理教程™

批处理Date命令用于用于获取当前系统时间。

语法

date

示例

以下示例显示了Data命令的用法。

@echo off
echo %DATE%

当前日期将显示在命令提示符下。 例如,

F:\worksp\batch_script>echo %DATE%
2018/01/17 周三


批处理Echo命令 - 批处理教程™

批处理Date命令用于显示消息,或打开或关闭命令回显。

语法

ECHO "string"

示例

以下示例显示了echo命令的用法。

Rem 打开回显,以便每个命令将显示执行
echo on
echo "Hello World"
Rem 关闭回显,以便每个命令执行时不会显示
@echo off
echo "Hello World"
Rem 显示PATH变量的内容
echo %PATH%

以下输出将显示在命令提示符下。

C:\>Rem 打开回显,以便每个命令将显示执行

C:\>echo on

C:\>echo "Hello World"
"Hello World"

C:\>Rem 关闭回显,以便每个命令执行时不会显示

"Hello World"
C:\Users\ADMINI~1\AppData\Local\Temp


批处理Exit命令 - 批处理教程™

批处理Exit命令用于退出DOS控制台。

语法

Exit

示例

以下示例显示了exit命令的用法。

@echo off
echo "Hello World"
exit

以下输出将显示在命令提示符下。

批处理文件将终止,命令提示符窗口将关闭。


批处理Md命令 - 批处理教程™

批处理Md命令在当前位置创建一个新目录。

语法

md [new directory name]

示例

以下示例显示了Md命令的用法。

@echo off
md newdir
cd newdir
cd Rem “Goes back to the parent directory and create 2 directories”
cd..
md newdir1 newdir1
cd newdir1
cd
cd..
cd newdir2
cd

以下输出将显示在命令提示符下。

F:\worksp\newdir
F:\worksp\newdir1
F:\worksp\newdir2


批处理Move命令 - 批处理教程™

批处理Move命令目录之间移动文件或目录。

语法

move [source] [destination]

文件将从源(source)复制到目标(destination)位置。

示例

以下示例显示了Move命令的用法。

@echo off
Rem Moves the file list.txt to the directory c:\tp
move C:\lists.txt c:\tp
Rem Renames directory Dir1 to Dir2, assuming Dir1 is a directory and Dir2 does not exist.
move Dir1 Dir2
Rem Moves the file lists.txt to the current directory.
move C:\lists.txt

所有操作都按照批处理文件中的注释执行。


批处理Path命令 - 批处理教程™

批处理Path命令显示或设置路径变量。

语法

PATH

示例

以下示例显示了Path命令的用法。

@echo off
Echo %PATH%

路径变量的值将显示在命令提示符下,如下所示 -

C:\Users\Administrator>PATH
PATH=E:\oracle11g\Administrator\product\11.2.0\dbhome_2\bin;E:\oracle12c\Administrator\product\12.2.0\dbhome_1\bin;D:\Program Files\Python36\Scripts\;D:\Program Files\Python36\;E:\oracle11g\Administrator\product\11.2.0\dbhome_1\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM;C:\WINDOWS\SYSTEM32\WINDOWSPOWERSHELL\V1.0\;C:\PROGRAM FILES (X86)\INTEL\SERVICES\IPT\;C:\PROGRAM FILES\BROADCOM\WHL\;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64\;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64\SYSWOW64;D:\PROGRAM FILES\TORTOISESVN\BIN;D:\Program Files\Java\jdk1.8.0_65;D:\Program Files\Java\jdk1.8.0_65\bin;D:\software\apache-maven-3.3.9\bin;D:\Program Files\nodejs;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;D:\wamp\bin\php\php5.6.16;C:\ProgramData\ComposerSetup\bin;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin;D:\Program Files\erl8.0\bin;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5\;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5\Doctrine extensions for PHP\;C:\Python3;D:\Program Files\PuTTY\;D:\Program Files (x86)\sbt\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\dotnet\;D:\Program Files\MATLAB\R2017\bin;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;D:\Program Files\nodejs\;D:\Program Files\Ruby24-x64\bin;D:\wamp\bin\php\php7.0.0\ext;C:\Users\Administrator\AppData\Local\.meteor\;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin;D:\Program Files\OpenSSL-Win64;D:\worksp\yiibai.com\gradle-3.1\bin;D:\software\yiibai\spring-1.4.3.RELEASE\bin;D:\wamp\bin\mysql\mysql5.7.9\bin;D:\software\apache-cassandra-3.10\bin;D:\Program Files\MongoDB\Server\3.4\bin;D:\Program Files\R\R-3.4.1\bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;D:\software\geckodriver;C:\Users\Administrator\AppData\Roaming\npm;


批处理Pause命令 - 批处理教程™

批处理Pause命令提示用户并等待输入一行。

语法

Pause

示例

以下示例显示了Pause命令的用法。

@echo off
pause

命令提示符将向用户显示消息“按任意键继续…”,并等待用户的输入。


批处理Prompt命令 - 批处理教程™

批处理Prompt命令可以用来更改或重置cmd.exe提示符。

语法

PROMPT [newpromptname]

示例

以下示例显示了Prompt命令的用法。

@echo off
prompt maxsu$G

$G是表示大于号,它在提示符末尾添加的符号。

显示给用户的提示现在将是maxsu>

C:\Users\Administrator>prompt maxsu$G

maxsu>
maxsu>
maxsu>


批处理Rd命令 - 批处理教程™

批处理Rd命令用来删除目录,但需要目录是空的,才可以被删除。

语法

rd [directoryname]

示例

以下示例显示了rd命令的不同变体(用法)。

@echo off
Rem removes the directory called newdir
rd C:\newdir
Rem removes 2 directories
rd Dir1 Dir2
Rem Removes directory with spaces
rd "Application A"
Rem Removes the directory Dir1 including all the files and subdirectories in it rd /s Dir1
Rem Removes the directory Dir1 including all the files and subdirectories in it but
asks for a user confirmation first.
rd /q /s Dir1

所有操作都按照批处理文件中的注释执行。


批处理Ren命令 - 批处理教程™

批处理Ren命令用来重命名文件和目录。

语法

ren [oldfile/dirname] [newfile/dirname]

将旧文件/目录名称中的文件名称重新命名为新文件名称。

示例

@echo off
ren C:\lists.txt C:\newlists.txt

文件lists.txt将被重命名为newlists.txt。


批处理Rem命令 - 批处理教程™

批处理Rem命令用于在批处理文件中的注释,对脚本操作进行说明,注释的内容不会被执行。

语法

REM remark description

示例

@echo off
REM This is a batch file
REM 这是另一个注释行


批处理Start命令 - 批处理教程™

批处理Start命令用于在新窗口中启动程序,或打开文档。

语法

START “programname”

示例

@echo off
start notepad.exe

批处理文件执行时,将启动一个新的记事本窗口。


批处理Time命令 - 批处理教程™

批处理Time命令用于设置或显示时间。

语法

Time

示例

@echo off
echo %TIME%

当前系统时间将显示。 例如,

10:14:34.85


批处理Type命令 - 批处理教程™

批处理Type命令将一个或多个文件的内容打印到输出中。

语法

TYPE [filename]

其中filename是需要显示其内容的文件。

示例

@echo off
TYPE C:\tp\lists.txt

文件lists.txt的内容将显示在命令提示符下。


批处理Vol命令 - 批处理教程™

批处理VOL命令用于显示卷标。

语法

VOL

示例

@echo off
VOL

执行上面示例代码,输出结果如下 -

C:\Users\Administrator>VOL
驱动器 C 中的卷是 System
卷的序列号是 80FF-2234


批处理Attrib命令 - 批处理教程™

批处理Attrib命令用于显示或设置当前目录中的文件的属性

语法

attrib

示例
以下示例显示attrib命令的不同变体(用法)。

@echo off
Rem Displays the attribites of the file in the current directory
Attrib
Rem Displays the attributes of the file lists.txt
attrib C:\tp\lists.txt
Rem Adds the "Read-only" attribute to the file.
attrib +r C:\tp\lists.txt
Attrib C:\tp\lists.txt
Rem Removes the "Archived" attribute from the file
attrib -a C:\tp\lists.txt
Attrib C:\tp\lists.txt

执行上面示例代码,输出结果如下 -

A C:\tp\assoclst.txt
A C:\tp\List.cmd
A C:\tp\lists.txt
A C:\tp\listsA.txt
A C:\tp\lists.txt
A R C:\tp\lists.txt
R C:\tp\lists.txt


批处理Chkdsk命令 - 批处理教程™

批处理Chkdsk命令用于检查磁盘是否有问题。

语法

Chkdsk

示例
以下示例显示attrib命令的不同变体(用法)。

@echo off
chkdsk

上述命令开始检查当前磁盘是否有错误。


批处理Cmd命令 - 批处理教程™

批处理Cmd命令用于调用命令提示符的另一个实例。

语法

cmd

示例

@echo off
cmd

命令提示符的另一个实例将被调用。如下所示 -

C:\Users\Administrator>cmd
Microsoft Windows [版本 10.0.16299.125]
(c) 2017 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>


批处理Comp命令 - 批处理教程™

批处理Comp命令用于比较2个文件的文件大小。

语法

COMP [sourceA] [sourceB]

其中sourceA和sourceB是需要比较的文件。

示例

@echo off
COMP C:\tp\lists.txt C:\tp\listsA.txt

上面的命令将比较文件lists.txt和listsA.txt,并确定两个文件大小是否不同。


批处理Convert命令 - 批处理教程™

批处理Convert命令用于将卷从FAT16或FAT32文件系统转换为NTFS文件系统。

语法

CONVERT [drive]

其中sourceA和sourceB是需要比较的文件。

示例

@echo off
CONVERT C:\

以上命令将转换C盘的文件系统。


批处理Driverquery命令 - 批处理教程™

批处理Driverquery命令用于显示所有安装的设备驱动程序及其属性。

语法

driverquery

示例

@echo off
driverquery

以上命令将显示当前系统中安装的所有设备驱动程序的信息。 以下是显示信息子集的示例。

vmx86 VMware vmx86 Kernel 2016/8/1 21:34:29
vnvdimm Microsoft 虚拟 NVDIMM Kernel 2069/9/17 6:21:25
volmgr 卷管理器驱动程序 Kernel 1983/3/26 15:57:03
volmgrx Dynamic Volume Manager Kernel 2070/10/5 22:37:26
volsnap 卷映像复制驱动程序 Kernel 2097/7/30 11:17:10
volume 卷驱动程序 Kernel 1984/12/29 8:16:44
vpci Microsoft Hyper-V 虚拟 Kernel 1982/7/15 4:00:54
vsmraid vsmraid Kernel 2014/4/23 3:21:41
VSTXRAID VIA StorX Storage RAID Kernel 2013/1/22 3:00:28
vwifibus Virtual Wireless Bus D Kernel 1992/10/9 4:43:00
vwififlt Virtual WiFi Filter Dr Kernel 2100/6/7 10:26:47
vwifimp Virtual WiFi Miniport Kernel 2029/8/22 14:56:34
WacomPen Wacom Serial Pen HID D Kernel 2049/9/2 3:56:06
wanarp 远程访问 IP ARP 驱动程 Kernel 2102/5/24 12:50:12
wanarpv6 远程访问 IPv6 ARP 驱动 Kernel 2102/5/24 12:50:12
wcifs Windows Container Isol File System 1973/4/2 19:11:07
wcnfs Windows Container Name File System 2028/12/4 12:52:01
WdBoot Windows Defender Antiv Kernel 2061/3/19 17:08:58
Wdf01000 Kernel Mode Driver Fra Kernel 2067/7/19 2:44:19
WdFilter Windows Defender Antiv File System 2001/8/8 22:54:57
wdiwifi WDI Driver Framework Kernel 2028/11/29 21:46:08
WdNisDrv Windows Defender Antiv Kernel 1973/9/18 0:37:44
wdnsfltr Windows Defender Netwo Kernel 2060/12/10 0:36:53
WFPLWFS Microsoft Windows 筛选 Kernel 2092/1/9 1:59:47
WIMMount WIMMount File System 2102/6/12 17:15:43
WindowsTrust Windows Trusted Execut Kernel 2021/10/24 5:56:48
WindowsTrust Microsoft Windows 可信 Kernel 2075/4/20 17:18:26
WinMad WinMad 服务 Kernel 2016/4/10 21:46:08
WinNat Windows NAT Driver Kernel 2038/4/30 23:54:58
WINUSB WinUsb Driver Kernel 1999/1/8 1:22:22
WinVerbs WinVerbs 服务 Kernel 2016/4/10 21:46:10
WmiAcpi Microsoft Windows Mana Kernel 2088/2/28 10:27:52
Wof Windows Overlay File S File System 2102/10/28 7:46:39
WpdUpFltr WPD Upper Class Filter Kernel 2068/5/23 10:04:34
ws2ifsl Winsock IFS Driver Kernel 2065/11/11 6:33:11
WSDPrintDevi WSD 打印支持 Kernel 1992/11/20 15:02:33
WSDScan WSD 扫描支持 Kernel 2065/8/7 0:47:18
WudfPf User Mode Driver Frame Kernel 1976/10/23 15:20:35
WUDFRd Windows Driver Foundat Kernel 2047/5/27 2:28:11
WUDFWpdMtp WUDFWpdMtp Kernel 2047/5/27 2:28:11
xboxgip Xbox 游戏输入协议驱动 Kernel 2081/10/6 5:48:16
xinputhid XINPUT HID 筛选器驱动 Kernel 2054/3/4 14:42:33


批处理Expand命令 - 批处理教程™

批处理Expand命令用于从压缩的.cab文件柜文件中提取文件。

语法

EXPAND [cabinetfilename]

示例

@echo off
EXPAND excel.cab

上述命令将提取当前位置的文件excel.cab的内容。


批处理Find命令 - 批处理教程™

批处理Find命令用于在文件或输入中搜索字符串,输出匹配的行。

语法

FIND [text] [destination]

其中,text是需要搜索的字符串,而destination是搜索的源文件。

示例

@echo off
FIND "Application" C:\tp\lists.txt

如果单词“Application”存在于文件lists.txt中,则包含该字符串的行将显示在命令提示符中。


批处理Format命令 - 批处理教程™

批处理Format命令用于将一个磁盘使用Windows支持的文件系统,如FAT,FAT32或NTFS,格式化覆盖以前的磁盘内容。

语法

format [drive]

其中,drive是需要格式化的驱动器。

示例

@echo off
format D:\

用上面的命令,D盘将被格式化。


批处理Help命令 - 批处理教程™

批处理Help命令用于显示Windows提供的命令列表。

语法

help

示例

@echo off
help

执行上面示例代码,得到以下结果 -

SCHTASKS Schedules commands and programs to run on a computer.
SHIFT Shifts the position of replaceable parameters in batch files.
SHUTDOWN Allows proper local or remote shutdown of machine.
SORT Sorts input.
START Starts a separate window to run a specified program or command.
SUBST Associates a path with a drive letter.
SYSTEMINFO Displays machine specific properties and configuration.
TASKLIST Displays all currently running tasks including services.
TASKKILL Kill or stop a running process or application.
TIME Displays or sets the system time.
TITLE Sets the window title for a CMD.EXE session.
TREE Graphically displays the directory structure of a drive or path.
TYPE Displays the contents of a text file.
VER Displays the Windows version.
VERIFY Tells Windows whether to verify that your files are written correctly to a disk.
VOL Displays a disk volume label and serial number.
XCOPY Copies files and directory trees.
WMIC Displays WMI information inside interactive command shell.

For more information on tools see the command-line reference in the online help.


批处理Ipconfig命令 - 批处理教程™

批处理Ipconfig命令用于显示Windows IP配置。 显示连接的配置和连接的名称。

语法

ipconfig

示例

@echo off
ipconfig

上述命令将显示当前机器上的Windows IP配置。 以下是输出的一个例子。


Windows IP 配置


以太网适配器 本地连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 2:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 VMware Network Adapter VMnet1:

连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::18bf:602d:c871:73
IPv4 地址 . . . . . . . . . . . . : 192.168.138.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :

以太网适配器 VMware Network Adapter VMnet8:

连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::88cc:d991:66:6e1
IPv4 地址 . . . . . . . . . . . . : 192.168.227.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :

无线局域网适配器 无线网络连接:

连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::f952:98e8:bac5:f718
IPv4 地址 . . . . . . . . . . . . : 192.168.1.106
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1

以太网适配器 蓝牙网络连接:

媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :

隧道适配器 本地连接* 12:

连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : 2001:0:9d38:6ab8:38ef:2b93:57:fe95
本地链接 IPv6 地址. . . . . . . . : fe80::38ef:2b93:3f57:73
默认网关. . . . . . . . . . . . . : ::


批处理Label命令 - 批处理教程™

批处理Label命令用于添加,设置或删除磁盘标签。

语法

Label

示例

@echo off
label

上述命令将提示用户输入当前驱动器的新标签。


批处理More命令 - 批处理教程™

批处理More命令用于一次显示一个或多个文件的内容。

语法

More [filename]

其中文件名称:filename是其内容需要一次列出一个屏幕的文件。

示例

@echo off
More C:\tp\lists.txt
Directory of C:\Program Files

上述命令将一次显示一个屏幕上文件lists.txt的内容。 以下是一个输出的例子。 注意 - 更多(12%) - 在屏幕的末尾。 为了继续显示文件的剩余内容,需要输入一个键。

12/22/2015 02:31 AM <DIR> .
12/22/2015 02:31 AM <DIR> ..
12/15/2015 11:14 PM <DIR> Application Verifier
12/18/2015 05:06 PM <DIR> Bonjour
12/26/2015 08:01 PM <DIR> CCleaner
12/18/2015 05:05 PM <DIR> Common Files
12/17/2015 11:04 AM <DIR> Git
12/15/2015 11:09 PM <DIR> IIS
12/15/2015 11:10 PM <DIR> IIS Express
12/15/2015 10:16 PM <DIR> Intel
03/18/2014 02:24 AM <DIR> Internet Explorer
12/18/2015 05:06 PM <DIR> iPod
12/18/2015 05:06 PM <DIR> iTunes
12/15/2015 11:16 PM <DIR> Microsoft Identity Extensions
12/15/2015 11:46 PM <DIR> Microsoft Office
12/22/2015 02:31 AM <DIR> Microsoft Silverlight
12/15/2015 11:15 PM <DIR> Microsoft SQL Server
12/15/2015 11:15 PM <DIR> Microsoft SQL Server Compact Edition
12/15/2015 10:59 PM <DIR> Microsoft Visual Studio 12.0
-- More (12%) --


批处理Net命令 - 批处理教程™

批处理Net命令用于根据使用的命令提供各种网络服务。

语法

NET [variant]

其用法可以是以下之一 -

  • net accounts
  • net computer
  • net config
  • net continue
  • net file
  • net group
  • net help
  • net helpmsg
  • net localgroup
  • net name
  • net pause
  • net print
  • net send
  • net session
  • net share
  • net start
  • net statistics
  • net stop
  • net time
  • net use
  • net user
  • net view

示例

@echo off
Net user

以上命令将显示系统中定义的当前帐户。 以下是一个输出的例子。

C:\Users\Administrator>Net user

\\MY-PC 的用户帐户

-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
WDAGUtilityAccount
命令成功完成。


批处理Ping命令 - 批处理教程™

批处理Ping命令用于通过网络将ICMP/IP “回显”数据包发送到指定的地址。

语法

PING [address]

其中address是目标系统的IP地址或主机名。

示例

@echo off
ping www.baidu.com

上述命令将发送ICMP/IP “回显”数据包到目的地址:111.13.100.92。 以下是输出的一个例子。

C:\Users\Administrator>ping www.baidu.com

正在 Ping www.a.shifen.com [111.13.100.92] 具有 32 字节的数据:
来自 111.13.100.92 的回复: 字节=32 时间=62ms TTL=54
来自 111.13.100.92 的回复: 字节=32 时间=62ms TTL=54
来自 111.13.100.92 的回复: 字节=32 时间=61ms TTL=54
来自 111.13.100.92 的回复: 字节=32 时间=61ms TTL=54

111.13.100.92 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 61ms,最长 = 62ms,平均 = 61ms


批处理Shutdown命令 - 批处理教程™

批处理Shutdown命令用于关闭计算机,或者注销当前用户。

语法

Shutdown

其中地址是目标系统的IP地址或主机名。

示例

@echo off
shutdown

如果执行批处理文件的用户具有相关权限,则计算机将被关闭。


批处理Sort命令 - 批处理教程™

批处理Sort命令用于从源文件获取输入,并按字母顺序排列其内容,从A到Z或Z到A。它在控制台上输出。

语法

Sort [filename]

其中,filename是内容需要排序的文件。

示例

@echo off
Sort C:\tp\lists.txt


批处理Subst命令 - 批处理教程™

批处理Subst命令用于将驱动器号分配给本地文件夹,显示当前分配或删除分配。

语法

Subst [driveletter]

其中,filename是内容需要排序的文件。

示例

@echo off
Subst p:

p将被分配为当前文件夹的驱动器号。


批处理Systeminfo命令 - 批处理教程™

批处理Systeminfo命令用于显示计算机及其操作系统的配置。

语法

systeminfo

示例

@echo off
systeminfo

以上命令将显示当前系统的系统信息。以下是输出的一个子集。


主机名: MY-PC
OS 名称: Microsoft Windows 10 专业版
OS 版本: 10.0.16299 暂缺 Build 16299
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站
OS 构件类型: Multiprocessor Free
注册的所有人: User
注册的组织: Microsoft
产品 ID: 00330-80000-00000-AA506
初始安装日期: 2017/12/1, 15:44:35
系统启动时间: 2018/1/16, 8:22:24
系统制造商: LENOVO
系统型号: 1141AD7
系统类型: x64-based PC
处理器: 安装了 1 个处理器。
[01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2500 Mhz
BIOS 版本: LENOVO 8HET41WW(1.23), 2012/1/13
Windows 目录: C:\WINDOWS
系统目录: C:\WINDOWS\system32
启动设备: \Device\HarddiskVolume1
系统区域设置: zh-cn;中文(中国)
输入法区域设置: zh-cn;中文(中国)
时区: (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
物理内存总量: 4,007 MB
可用的物理内存: 1,166 MB
虚拟内存: 最大值: 5,607 MB
虚拟内存: 可用: 1,510 MB
虚拟内存: 使用中: 4,097 MB
页面文件位置: F:\pagefile.sys
域: WorkGroup
登录服务器: \\MY-PC
修补程序: 安装了 6 个修补程序。
[01]: KB4048951
[02]: KB4053577
[03]: KB4054022
[04]: KB4056887
[05]: KB4058043
[06]: KB4054517
网卡: 安装了 5 个 NIC。
[01]: VMware Virtual Ethernet Adapter for VMnet8
连接名: VMware Network Adapter VMnet8
启用 DHCP: 是
DHCP 服务器: 192.168.227.254
IP 地址
[01]: 192.168.227.1
[02]: fe80::88cc:d991:b966:6e1
[02]: VMware Virtual Ethernet Adapter for VMnet1
连接名: VMware Network Adapter VMnet1
启用 DHCP: 是
DHCP 服务器: 192.168.138.254
IP 地址
[01]: 192.168.138.1
[02]: fe80::18bf:602d:c871:7cee
[03]: 1x1 11bgn Wireless LAN PCI Express Half Mini Card Adapter
连接名: 无线网络连接
启用 DHCP: 是
DHCP 服务器: 192.168.1.1
IP 地址
[01]: 192.168.1.106
[02]: fe80::f952:98e8:bac5:f7b9
[04]: Realtek PCIe GBE Family Controller
连接名: 本地连接
状态: 媒体连接已中断
[05]: Bluetooth Device (Personal Area Network)
连接名: 蓝牙网络连接
状态: 媒体连接已中断
Hyper-V 要求: 虚拟机监视器模式扩展: 是
固件中已启用虚拟化: 是
二级地址转换: 是
数据执行保护可用: 是


批处理Taskkill命令 - 批处理教程™

批处理Taskkill命令用于结束一个或多个任务。

语法

taskkill /im [taskname]

示例

@echo off
Taskkill /im mspaint.exe

上述命令将发送一个终止消息到MS Paint的任何打开的程序。


批处理Tasklist命令 - 批处理教程™

批处理Tasklist命令用于列出任务,包括任务名称和进程ID(PID)。

语法

Tasklist

示例

@echo off
Tasklist

以上命令将列出当前系统上的所有任务。


批处理Xcopy命令 - 批处理教程™

批处理Xcopy命令用于以更高级的方式复制文件和目录。

语法

Xcopy [source][destination]

示例

Xcopy c:\lists.txt c:\tp\

上述命令将文件lists.txt复制到tp文件夹。


批处理Tree命令 - 批处理教程™

批处理Tree命令用于将当前目录的所有子目录的树显示为递归或深度的任何级别。

语法

tree

示例

@echo off
tree

以上命令将显示当前目录的树形结构。 以下是输出的一个例子。

Folder PATH listing for volume Windows8_OS
Volume serial number is E41C-6F43
C:.
├───newdir
├───newdir1
└───newdir2


批处理Fc命令 - 批处理教程™

批处理Fc命令用于列出了两个文件之间的实际差异。

语法

Fc [fileA] [fileB]

其中fileA和fileB是需要比较的2个文件。

示例

@echo off
FC lists.txt listsA.txt

上述命令将显示文件内容(lists.txt和listsA.txt)的差异(如果有的话)。


批处理Diskpart命令 - 批处理教程™

批处理Diskpart命令用于显示和配置磁盘分区的属性。

语法

Diskpart

示例

@echo off
diskpart

以上命令显示了磁盘分区的属性。 以下是输出的一个例子。

Microsoft DiskPart 版本 10.0.16299.15

Copyright (C) Microsoft Corporation.
在计算机上: MY-PC

DISKPART>


批处理Title命令 - 批处理教程™

批处理Title命令用于设置控制台窗口中显示的标题。

语法

TITLE [Tilename]

其中,tilename是要提供给命令提示符窗口标题的新名称。

示例

@echo off
Title “New Windows Title”

上述命令将把窗口的标题改为“New Windows Title“。


批处理Set命令 - 批处理教程™

批处理Set命令用于显示当前系统上的环境变量列表。

语法

set

示例

@echo off
set

以上命令显示当前系统上的环境变量列表。如下所示 -

Path=D:\Program Files\Python36\Scripts\;D:\Program Files\Python36\;E:\oracle11g\Administrator\product\11.2.0\dbhome_1\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM;C:\WINDOWS\SYSTEM32\WINDOWSPOWERSHELL\V1.0\;C:\PROGRAM FILES (X86)\INTEL\SERVICES\IPT\;C:\PROGRAM FILES\BROADCOM\WHL\;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64\;C:\PROGRAM FILES\BROADCOM\WHL\SYSWOW64\SYSWOW64;D:\PROGRAM FILES\TORTOISESVN\BIN;D:\Program Files\Java\jdk1.8.0_65;D:\Program Files\Java\jdk1.8.0_65\bin;D:\software\apache-maven-3.3.9\bin;D:\Program Files\nodejs;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;D:\wamp\bin\php\php5.6.16;C:\ProgramData\ComposerSetup\bin;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin;D:\Program Files\erl8.0\bin;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5\;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5 & MySQL Utilities 1.5\Doctrine extensions for PHP\;C:\Python3;D:\Program Files\PuTTY\;D:\Program Files (x86)\sbt\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\dotnet\;D:\Program Files\MATLAB\R2017\bin;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files\Microsoft SQL Server\140\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\;D:\Program Files\nodejs\;D:\Program Files\Ruby24-x64\bin;D:\wamp\bin\php\php7.0.0\ext;C:\Users\Administrator\AppData\Local\.meteor\;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin;D:\Program Files\OpenSSL-Win64;D:\worksp\yiibai.com\gradle-3.1\bin;D:\software\yiibai\spring-1.4.3.RELEASE\bin;D:\wamp\bin\mysql\mysql5.7.9\bin;D:\software\apache-cassandra-3.10\bin;D:\Program Files\MongoDB\Server\3.4\bin;D:\Program Files\R\R-3.4.1\bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;D:\software\geckodriver;C:\Users\Administrator\AppData\Roaming\npm;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PYW;.RB;.RBW
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2a07
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\;C:\Program Files (x86)\Microsoft SQL Server\140\Tools\PowerShell\Modules\
PUBLIC=C:\Users\Public
RUBYOPT=-Eutf-8
SBT_HOME=D:\Program Files (x86)\sbt\
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\Users\ADMINI~1\AppData\Local\Temp
TMP=C:\Users\ADMINI~1\AppData\Local\Temp
USERDOMAIN=MY-PC
USERDOMAIN_ROAMINGPROFILE=MY-PC
USERNAME=Administrator
USERPROFILE=C:\Users\Administrator
VS140COMNTOOLS=D:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
windir=C:\WINDOWS
windows_tracing_flags=3
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log


批处理文件 - 批处理教程™

在本章中,我们将学习如何创建,保存,执行和修改批处理文件。

创建批处理文件

批处理文件通常在记事本中创建。 因此,最简单的方法是打开记事本并输入脚本所需的命令。 对于这个练习,打开记事本并输入以下语句。

:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
::
@ECHO OFF
DEL .
DR

保存批处理文件

在创建批处理文件后,下一步是保存批处理文件。 批处理文件的扩展名为.bat或.cmd。 命名批处理文件时需要注意的一些常规规则 -

  • 在命名批处理文件时避免使用空格,有时会在从其他脚本中调用时产生问题。
  • 不要在系统中可用的常见批处理文件(如ping.cmd)之后将其命名。

以下屏幕截图显示了如何保存批处理文件。
3c1d7ea2a76bc87e70439eb65a9a3fc5.jpg

保存批处理文件时要注意几点。

  • 请记住将.bat或.cmd作为文件扩展名(即:放在文件名的末尾)。
  • 选择“另存为类型”选项作为“所有文件”。
  • 把整个文件名放在引号""中。

执行批处理文件

以下是执行批处理文件的步骤 -

第1步 - 打开命令提示符(cmd.exe)。
第2步 - 转到存储.bat或.cmd文件的位置。
第3步 - 按照下图所示写入文件的名称,然后按Enter键执行批处理文件。

2825c9b5bddcf378640f7d6b3a1149cb.jpg

修改批处理文件

以下是修改现有的批处理文件的步骤。

  • 第1步 - 打开Windows资源管理器。
  • 第2步 - 转到存储.bat或.cmd文件的位置。
  • 第3步 - 右键单击该文件,然后从上下文菜单中选择“编辑”选项。 该文件将在记事本中打开以供进一步编辑。

2fa519093d1da848ddf28b692a491aa5.jpg


批处理文件I/O - 批处理教程™

在批处理脚本中,可以执行任何编程语言中预期的正常文件I/O操作。

以下是一些可以在文件上执行的操作。

  • 创建文件
  • 读文件
  • 写入文件
  • 删除文件
  • 移动文件
  • 重命名文件


批处理创建文件 - 批处理教程™

新文件的创建是通过重定向过滤器>来完成的。 此过滤器可用于将任何输出重定向到一个文件。 以下是如何使用重定向命令创建文件的简单示例。

示例

@echo off
echo "Hello">C:\new.txt

如果文件C:\new.txt不存在,那么它将在上述命令执行后创建。


批处理写入文件 - 批处理教程™

内容写入文件也是借助于重定向过滤器来完成的。 此过滤器可用于将任何输出重定向到文件。 以下是如何使用重定向命令将文件写入数据来创建文件的一个简单示例。

示例

@echo off
dir C:\>C:\new.txt

上面的代码片段首先使用DIR命令来获取整个C:\的目录列表。 然后,它将获得该输出,重定向命令将其发送到文件new.txt。

如果打开C盘上的new.txt文件,这个文件中记录有C盘的内容。 以下是一个示例输出。

驱动器 C 中的卷是 System
卷的序列号是 80FF-2234

C:\ 的目录

2015/11/10 07:28 1,024 .rnd
2015/12/04 07:38 30 AVScanner.ini
2016/04/18 20:00 <DIR> Barcode
2016/08/30 14:28 2,736 DriverName.cfg
2016/04/17 20:54 <DIR> drivers
2015/12/03 15:32 46 file-for-download.txt
2009/07/30 16:21 171,136 grldr.bak
2017/12/11 09:44 93 HaxLogs.txt
2017/12/20 11:04 <DIR> inetpub
2015/11/09 16:37 <DIR> Intel
2016/01/04 22:23 107 LibAntiPrtSc_ERROR.log
2016/04/01 21:54 544 LibAntiPrtSc_INFORMATION.log
2017/12/01 02:22 <DIR> PerfLogs
2017/12/11 09:44 <DIR> Program Files
2017/12/01 02:42 <DIR> Program Files (x86)
2017/01/03 11:04 <DIR> Python3
2016/04/08 22:17 1,256 report.rpt
2015/10/30 23:49 668,784 SecurityScanner.dll
2015/11/09 16:45 211 setup.log
2015/11/09 16:52 5,120 setupinfidb.db
2017/11/16 16:47 <DIR> temp
2016/05/28 16:54 <DIR> Ticket
2017/12/20 10:31 <DIR> Users
2018/01/08 21:24 <DIR> Windows
2017/12/12 19:21 <DIR> Windows.old
12 个文件 851,087 字节
13 个目录 20,262,187,008 可用字节


批处理附加到文件 - 批处理教程™

内容写入文件也是在双重定向过滤器>>的帮助下完成的。 此过滤器可用于将任何输出附加到文件。 以下是如何使用重定向命令将数据附加到文件来创建文件的一个简单示例。

示例

@echo off
echo "这是C盘的目录文件列表">D:\new.txt
echo "======================================">>D:\new.txt
dir C:\>>D:\new.txt

在上面的例子中,可以看到第一个echo命令用于使用单个重定向命令创建文件,而DIR命令则使用双重定向过滤器输出到文件。

如果打开D盘上的new.txt文件,这文件中有记录C盘的目录文件内容,加上字符串“这是C盘的目录文件列表”。以下是这个示例输出。

"这是C盘的目录文件列表"
"======================================"
驱动器 C 中的卷是 System
卷的序列号是 80FF-2234

C:\ 的目录

2015/11/10 07:28 1,024 .rnd
2015/12/04 07:38 30 AVScanner.ini
2016/04/18 20:00 <DIR> Barcode
2016/08/30 14:28 2,736 DriverName.cfg
2016/04/17 20:54 <DIR> drivers
2015/12/03 15:32 46 file-for-download.txt
2009/07/30 16:21 171,136 grldr.bak
2017/12/11 09:44 93 HaxLogs.txt
2017/12/20 11:04 <DIR> inetpub
2015/11/09 16:37 <DIR> Intel
2016/01/04 22:23 107 LibAntiPrtSc_ERROR.log
2016/04/01 21:54 544 LibAntiPrtSc_INFORMATION.log
2017/12/01 02:22 <DIR> PerfLogs
2017/12/11 09:44 <DIR> Program Files
2017/12/01 02:42 <DIR> Program Files (x86)
2017/01/03 11:04 <DIR> Python3
2016/04/08 22:17 1,256 report.rpt
2015/10/30 23:49 668,784 SecurityScanner.dll
2015/11/09 16:45 211 setup.log
2015/11/09 16:52 5,120 setupinfidb.db
2017/11/16 16:47 <DIR> temp
2016/05/28 16:54 <DIR> Ticket
2017/12/20 10:31 <DIR> Users
2018/01/08 21:24 <DIR> Windows
2017/12/12 19:21 <DIR> Windows.old
12 个文件 851,087 字节
13 个目录 20,261,199,872 可用字节


批处理读取文件 - 批处理教程™

在批处理脚本中读取文件是通过使用FOR循环命令来完成文件中需要读取的每一行。 由于没有直接的命令从文件中读取文本到变量中,所以需要使用for循环来达到这个目的。

我们来看看如何实现这个目标的例子。

示例

@echo off
FOR /F "tokens=* delims=" %%x in (new.txt) DO echo %%x

delims参数用于将文件中的文本分解为不同的标记或单词。 每个单词或标记然后存储在变量x中。 对于从文件读取的每个单词,都会进行回显以将单词打印到控制台输出。


批处理删除文件 - 批处理教程™

要删除文件,可使用批处理脚本提供的DEL命令。

语法

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

以下是DEL命令的选项的描述。

编号

选项

描述

1

Names

指定一个或多个文件或目录的列表。 通配符可能被用来删除多个文件。 如果指定了一个目录,则该目录内的所有文件都将被删除

2

/P

提示在删除每个文件之前进行确认。

3

/F

强制删除只读文件。

4

/S

删除所有子目录中的特定文件。

5

/Q

安静模式,不要问是否可以删除全局通配符。

6

/A

根据属性选择要删除的文件。

7

attributes

R只读文件,S系统文件,H隐藏文件,A文件准备归档 - 前缀含义不是

我们来看看如何实现删除文件的例子。

示例

del test.bat

如果文件存在,上面的命令将删除当前目录下的test.bat文件。

del c:\test.bat

如果文件存在,上面的命令将删除当前目录下的文件C:\test.bat。

del c:\*.bat

*(星号)是一个模式的字符。 *.bat表示要删除c:\目录下的所有以.bat结尾的文件。

del c:\?est.tmp

?(问号)是一个字母的单个通配符。在上面的例子中使用这个命令会删除任何以est.tmp结尾的文件,比如pest.tmp或者test.tmp这样的文件都会被删除。


批处理重命名文件 - 批处理教程™

要重命名文件,可使用批处理脚本中提供的REN或RENAME命令。

RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]

让我们来看看重命名文件的一些例子。

示例

rename *.txt *.bak

上述命令将所有文本文件(.txt)重命名为扩展名为.bak的文件。

rename "TESTA.txt" "TESTB.txt"

上述命令将文件TESTA.txt重命名为TESTB.txt。


批处理移动文件 - 批处理教程™

要移动文件,可使用批处理脚本提供的MOVE命令。

MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

以下是可以呈现给DEL命令的选项的描述。

编号

选项

描述

1

[drive:][path]filename1

指定要移动的文件的位置和名称

2

destination

指定文件的新位置。 目标可以由驱动器号和冒号,目录名称或组合组成。 如果只移动一个文件,则在移动文件时,如果要重命名文件,也可以包含一个文件名。

3

[drive:][path]dirname1

指定要重命名的目录。

4

dirname2

指定目录的新名称。

5

/Y

禁止提示以确认要覆盖现有的目标文件。

6

/-Y

提示确认要覆盖现有的目标文件。

我们来看一些重命名文件的例子。

示例

move c:\windows\temp\*.* c:\temp

上述命令将把c:\windows\temp的文件移动到c:\temp目录。

move new.txt, test.txt c:\example

上述命令将文件new.txt和test.txt移动到c:\example文件夹中。


批处理文件管道 - 批处理教程™

管道运算符(|)将一个命令的输出(默认为STDOUT)引导到另一个命令的输入(默认为STDIN)。 例如,以下命令将目录C:\的内容进行排序。

dir C:\ | sort

在这个例子中,两个命令同时启动,但是sort命令暂停,直到它接收到dir命令的输出。 sort命令使用dir命令的输出作为输入,然后将其输出发送到句柄1(即STDOUT)。

以下是pipe命令的另一个示例。 在这个例子中,文件C:\new.txt的内容通过管道过滤器发送到sort命令。

@echo off
TYPE C:\new.txt | sort

将命令与重定向操作符组合在一起

通常,管道操作符与重定向操作符一起使用,以便在处理管道命令时提供有用的功能。

例如,下面的命令将首先获取C:\中定义的所有文件,然后使用pipe命令将查找所有带.txt扩展名的文件。 然后它将获取这个输出并将其输出到文件AllText.txt中。

dir C:\ | find "txt" > AllText.txt

使用多个管道命令

要在同一命令中使用多个过滤器,请使用管道(|)分隔过滤器。 例如,以下命令搜索驱动器C:\上的每个目录,找到包含字符串“Log”的文件名,然后将它们一次显示在一个“命令提示符”窗口中 -

dir c:\ /s /b | find "TXT" | more

以下是一些如何使用管道过滤器的例子。

例子
以下示例使用tasklist命令发送所有正在运行的任务的列表,并将输出发送到find命令。 然后,find命令将查找所有类型为QQ的进程,并将其显示在命令提示符中。

tasklist | find "QQ"

以下是一个示例输出 -

C:\Users\Administrator>tasklist | find "QQ"
QQProtect.exe 5672 Services 0 14,136 K
QQ.exe 11672 Console 1 164,156 K
QQExternal.exe 8428 Console 1 32,484 K

以下示例使用tasklist命令发送所有正在运行的任务的列表,并将输出发送到more命令。 然后,more命令将一次显示一页运行任务的列表。

tasklist | more

执行上面示例代码,得到以下结果 -

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 136 K
smss.exe 396 Services 0 852 K
csrss.exe 568 Services 0 4,532 K
wininit.exe 656 Services 0 5,328 K
csrss.exe 668 Console 1 4,884 K
winlogon.exe 764 Console 1 7,724 K
services.exe 884 Services 0 8,284 K
lsass.exe 892 Services 0 13,156 K
fontdrvhost.exe 1000 Services 0 3,776 K
fontdrvhost.exe 1008 Console 1 24,784 K
svchost.exe 412 Services 0 3,496 K
svchost.exe 528 Services 0 22,596 K
WUDFHost.exe 880 Services 0 6,132 K
svchost.exe 832 Services 0 11,216 K
svchost.exe 1036 Services 0 8,152 K
dwm.exe 1124 Console 1 44,432 K
-- More --

以下示例使用tasklist命令发送所有正在运行的任务的列表,并将输出发送到find命令。 然后,find命令将查找所有类型为chrome的进程,然后使用重定向命令将内容发送到文件tasklist.txt。

tasklist | find "chrome" > tasklist.txt

如果打开文件tasklist.txt,就会得到如下的输出结果 -

chrome.exe 11416 Console 1 164,340 K
chrome.exe 4564 Console 1 10,108 K
chrome.exe 9824 Console 1 10,312 K
chrome.exe 11984 Console 1 86,592 K
chrome.exe 12080 Console 1 23,272 K
chrome.exe 11360 Console 1 139,212 K
chrome.exe 9404 Console 1 108,488 K
chrome.exe 1240 Console 1 74,468 K
chrome.exe 10280 Console 1 119,784 K


批处理文件输入 - 批处理教程™

批处理文件运行时,可以选择传递命令行参数,然后在程序中读取这些参数以进一步处理。 批处理文件参数可以从程序中使用%运算符以及参数的数字位置进行调用。 以下是如何定义命令行参数。

  • %0是被调用的程序名称。
  • %1是第一个命令行参数。
  • %2是第二个命令行参数。
  • 所以直到%9。

我们来看一个如何使用命令行参数的简单例子。

示例

@echo off
echo The first parameter is %1
echo The second parameter is %2
echo The third parameter is %3

如果上面的代码存储在一个名为test.bat的文件中,并且该文件运行为 -

test.bat 5 10 15

那么,以下将是输出 -

The first parameter is 5
The second parameter is 10
The third parameter is 15


批处理语法 - 批处理教程™

通常,批处理文件中的第一行通常由以下命令组成。

echo命令

@echo off

默认情况下,批处理文件将在运行时显示其命令。 这第一个命令的目的是关闭这个显示。 “echo off”命令会关闭整个脚本的显示,除了“echo off”命令本身之外。前面的“@”符号使命令也适用于自己。

文档注释

很多时候批处理文件也包含以“Rem”命令开始的行。 这是编写注释和文档的一种方式。程序执行时忽略Rem关键字之后的任何内容。 对于越来越复杂的批处理文件,这通常对理解程序执行一个好的做法。

第一批脚本程序

下面来构建一个简单的批脚本程序。 打开记事本并输入以下代码行。 将该文件保存为“List.cmd”。

代码执行以下操作 -

  • 使用echo off命令确保执行代码时不显示命令。
  • Rem命令用于添加注释来说明这个批处理文件的功能。
  • dir命令用于获取目录C:\Program Files的内容。
  • '>'命令用于将输出重定向到文件C:\lists.txt。
  • 最后,echo命令用于告诉用户操作已完成。

完整的代码如下所示 -

@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"

当执行上述命令时,C:\Program Files中的文件名将被发送到文件C:\lists.txt,并在命令提示符下显示“The program has completed”消息。


批处理变量 - 批处理教程™

批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过set命令完成的。

命令行参数

批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量%1,%2,%3等从批处理文件中调用。

以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。

@echo off
echo %1
echo %2
echo %3

如果上面的批处理脚本存储在一个名为test.bat的文件中,我们将运行该批处理 -

Test.bat 1 2 3

以下是批处理文件执行时在命令提示符下的外观截图。

e168353d4b1f9a6a9106e8ff64bb9848.jpg

以上命令产生以下输出。

1
2
3

如果要运行批处理 -

Example 1 2 3 4

输出仍然与上面一样。 但是,第四个参数将被忽略。

set命令

变量可以被初始化的另一种方式是通过“set”命令。 以下是set命令的语法。

语法

set /A variable-name=value

其中 -

  • variable-name - 是想要设置的变量的名称。
  • value - 是需要根据变量设置的值。
  • /A - 如果该值本质上是数值,则使用此开关。

以下示例显示了可以使用set命令的简单方法。

示例

@echo off
set message=Hello World
echo %message%

  • 在上面的代码片段中,定义了一个名为“message”的变量,其值为“Hello World”。
  • 要显示变量的值,请注意变量需要包含在%符号中。

以上命令产生以下输出 -

Hello World

使用数字值

在批处理脚本中,也可以定义一个变量来保存一个数值。 这可以通过使用/A开关完成。
以下代码显示了可以使用/A开关设置数值的一种简单方法。

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%

  • 首先将2个变量a和b的值分别设置为5和10。
  • 相加这些值并存储在变量c中。
  • 最后,显示变量c的值。

上述程序的输出结果为15。
所有的算术运算符都在批处理文件中工作。 以下示例显示算术运算符可以在批处理文件中使用。

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
SET /A c=%a% - %b%
echo %c%
SET /A c=%b% / %a%
echo %c%
SET /A c=%b% * %a%
echo %c%

以上命令产生以下输出。

15
-5
2
50

局部与全局变量

在任何编程语言中,都有一个选项可以将变量标记为具有某种范围,即可以访问它们的代码部分。 通常情况下,具有全局作用域的变量可以从程序中的任何地方访问,而局部作用域变量则有一个可以访问的定义的边界。

DOS脚本还定义了局部和全局范围的变量。 默认情况下,变量是整个命令提示符会话的全局变量。 调用SETLOCAL命令,使变量局部在脚本的范围内。 在调用SETLOCAL之后,任何变量赋值在调用ENDLOCAL,调用EXIT,或者当执行到达脚本中的文件结尾(EOF)时都会返回。 以下示例显示了在脚本中设置局部和全局变量时的差异。

示例

@echo off
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

上述程序几乎没有重要的事情要注意。

  • 'globalvar'是用全局范围定义的,在整个脚本中都是可用的。
  • var变量是在局部范围内定义的,因为它被包含在SETLOCAL和ENDLOCAL块之间。 因此,这个变量在执行'ENDLOCAL'语句后就会被销毁。

以上命令产生以下输出。

13150
5

注意:命令echo %var%不会产生任何东西,因为在ENDLOCAL语句之后,'var'变量将不再存在。

使用环境变量

如果有跨批处理文件使用的变量,那么最好使用环境变量。 当定义了环境变量,就可以通过%符号来访问它。 以下示例显示如何查看系统上定义的JAVA_HOME。 JAVA_HOME变量是各种应用程序通常使用的关键组件。

@echo off
echo %JAVA_HOME%

输出将显示从系统到系统的JAVA_HOME目录。 以下是一个输出的例子。

C:\Users\Administrator>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_65


批处理注释 - 批处理教程™

为创建的脚本添加注释或文档总是一个好习惯。 这是一个维护脚本用来理解脚本实际所做的事情所必需的注释。

例如,考虑下面这段没有注释形式的代码。 如果一个没有任何注释的脚本,普通人试图理解脚本,那么需要很多时间来理解脚本做些什么工作。

ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
SETLOCAL
SET WSS=
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"')
DO ECHO.%%a %%A
ENDLOCAL
GOTO:EOF
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part
of the computer name^(s^) to be displayed

使用Rem语句注释

有两种方法可以在批处理脚本中创建注释; 一个是通过Rem命令。 Rem语句后的任何文本都将被视为注释,不会被执行。 以下是此声明的一般语法。

语法

Rem Remarks

其中“Remarks”是需要添加的注释。

以下示例显示了可以使用Rem命令的简单方法。

示例

@echo off
Rem This program just displays Hello World
set message=Hello World
echo %message%

以上命令产生以下输出。注意:Rem语句行不会被执行。

Hello World

注释使用::声明

在批处理脚本中创建注释的另一种方法是通过::命令。任何遵循::语句的文本都将被视为注释,不会被执行。 以下是此声明的一般语法。

语法

:: Remarks

其中“Remarks”是需要添加的注释。

以下示例显示了可以使用Rem命令的简单方法。

示例

@echo off
:: This program just displays Hello World
set message=Hello World
echo %message%

以上命令产生以下输出。 注意,具有::语句的行将不会被执行。

Hello World

注 - 如果Rem的行数太多,可能会使代码变慢,因为最后还是需要执行批处理文件中的每行代码。

让我们来看一下在本主题开始时看到的大脚本的例子,看看它在添加注释文档时的样子。

::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF
:: Windows version check
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
:: Command line parameter check
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
:: Keep variable local
SETLOCAL
:: Initialize variable
SET WSS=
:: Parse command line parameter
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
:: Use NET VIEW and NBTSTAT to find computers and logged on users
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND
"<03>"') DO ECHO.%%a %%A
:: Done
ENDLOCAL
GOTO:EOF
:Syntax
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the
computer name^(s^) to be displayed

现在可以看到,对于没有开发代码的用户来说,代码变得更加易于理解,因此更易于维护。


批处理字符串 - 批处理教程™

在DOS中,字符串是一个有序的字符集合,比如:"Hello,World!"。

编号

字符串操作

描述

1

创建字符串

字符串可以通过以下方式在DOS中创建。

2

空字符串

空的字符串

3

字符串插值

字符串插值是一种通过将常量,变量,文字和表达式中的值包含在字符串文字中来构造新的字符串值的方法。

4

字符串连接

可以使用set运算符连接两个字符串,一个字符串和一个字符,或者两个字符。 以下是一个简单的例子,展示了如何使用字符串连接。

5

字符串长度

在DOS脚本中,没有定义用于计算字符串长度的长度函数。 有自定义函数可以用于相同的。 以下是用于查看字符串长度的自定义函数的示例。

6

toInt

使用set变量设置为字符串的变量可以使用使用set变量的/A开关转换为整数。 以下示例显示了如何完成此操作。

7

对齐

这用于将文本向右对齐,通常用于提高数字列的可读性。

8

左字符串

这用于从字符串的开头提取字符。

9

中间字符串

这用于通过字符串中字符的位置来提取子字符串。

10

删除字符串

字符串替换功能也可以用来从另一个字符串中删除一个子字符串。

11

删除两端

这用于删除字符串的第一个和最后一个字符。

12

删除所有空格

这用于替换删除字符串中的所有空格。

13

替换一个字符串

要用一个字符串替换子字符串,请使用字符串替换功能。

14

右字符串

这用于从字符串的末尾提取字符。


批处理创建字符串 - 批处理教程™

在DOS中创建字符串可以通过以下方式。

示例

@echo off
:: This program just displays Hello World
set message=Hello World
echo %message%

以上命令产生以下输出。

Hello World


批处理空字符串 - 批处理教程™

如下例所示,可以在DOS脚本中创建一个空字符串。

Set a=

要检查是否存在空字符串,需要在方括号中包含变量名,并将其与方括号中的值进行比较,如以下示例所示。

[%a%]==[]

以下示例显示了如何创建空字符串以及如何检查是否存在空字符串。

示例

@echo off
SET a=
SET b=Hello
if [%a%]==[] echo "String A is empty"
if [%b%]==[] echo "String B is empty "

以上命令产生以下输出。

String A is empty


批处理字符串插值 - 批处理教程™

字符串插值是一种通过将常量,变量,文字和表达式中的值包含在字符串文字中来构造新的字符串值的方法。

在DOS脚本中,使用set命令可以完成字符串插值,并在使用set命令时将数字定义的变量或任何其他文字排成一行。

以下示例显示了如何使用数字值完成字符串插值。

示例

@echo off
SET a=Hello
SET b=World
SET /A d=50
SET c=%a% and %b% %d%
echo %c%

以上命令产生以下输出。

Hello and World 50


批处理字符串连接 - 批处理教程™

可以使用set运算符连接两个字符串,一个字符串和一个字符,或者两个字符。 以下是一个简单的例子,展示了如何使用字符串连接。

示例

@echo off
SET a=Hello
SET b=World
SET c=%a% and %b%
echo %c%

以上命令产生以下输出。

Hello and World


批处理字符串长度 - 批处理教程™

在DOS脚本中,没有定义用于查找字符串长度的长度函数。 可以使用自定义的函数实现这个目的。 以下是用于查看字符串长度的自定义函数的示例。

示例

@echo off
set str=Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b

:strLen
setlocal enabledelayedexpansion

:strLen_Loop
if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof

关于上述程序的一些重要事项需要注意 -

  • 计算字符串长度的代码在strLen块中定义。
  • 字符串的长度保存在变量len中。

以上命令产生以下输出。

11


批处理toInt - 批处理教程™

使用set变量设置为字符串的变量后,可以使用set变量的/A开关转换为整数。以下示例显示了如何完成此操作。

@echo off
set var=13145
set /A var=%var% + 5
echo %var%

以上命令产生以下输出。

13150

除此之外,字符串还有以下可用的实现。 批处理脚本具有以下用于在字符串中执行字符串操作的命令。

%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%

这可以包括负数 -

%variable:~num_chars_to_skip, -num_chars_to_keep%
%variable:~-num_chars_to_skip,num_chars_to_keep%
%variable:~-num_chars_to_skip,-num_chars_to_keep%


批处理右对齐 - 批处理教程™

这用于将文本向右对齐,通常用于提高数字列的可读性。

@echo off
set x=1000
set y=1
set y=%y%
echo %x%

set y=%y:~-4%
echo %y%

关于上述计划的一些关键事项是 -

  • 将空格添加到y的变量中,在这示例中是将9个空格添加到y的变量中。
  • 使用~-4选项来表示只想显示字符串y的最后4个字符。

以上命令产生以下输出。 要注意的是,当显示数字时,2个值被对齐以匹配单位列。

1000
1


批处理左字符 - 批处理教程™

这用于从字符串的开头提取字符。

示例

@echo off
set str=Helloworld
echo %str%

set str=%str:~0,5%
echo %str%

关于上述程序的键是~0,5用于指定需要显示的字符。 在这示例中,应该显示字符0到5。

以上命令产生以下输出。

Helloworld
Hello


批处理中间字符 - 批处理教程™

这用于通过字符串中字符的位置来提取子字符串。

示例

@echo off
set str=Helloworld
echo %str%

set str=%str:~5,10%
echo %str%

关于上述程序的键是~5,10用于指定需要显示的字符。 在这个示例中,要显示字符5到10。

以上命令产生以下输出。

Helloworld
world


批处理删除字符串 - 批处理教程™

字符串替换功能也可以用来从一个字符串中删除一个子字符串。

示例

@echo off
set str=Batch scripts is easy. It is really easy.
echo %str%

set str=%str:is=%
echo %str%

关于上述程序是要注意的是,'is'这个词是使用'stringtoberemoved'=命令从字符串中删除。

以上命令产生以下输出。

Batch scripts is easy. It is really easy.
Batch scripts easy. It really easy.


批处理删除两端 - 批处理教程™

这用于删除字符串的第一个和最后一个字符

示例

@echo off
set str=Batch scripts is easy. It is really easy
echo %str%

set str=%str:~1,-1%
echo %str%

关于上述程序中,~1,-1用于删除字符串的第一个和最后一个字符。

以上命令产生以下输出。

Batch scripts is easy. It is really easy
atch scripts is easy. It is really eas


批处理删除所有空格 - 批处理教程™

这用于通过替换删除字符串中的所有空格。

示例

@echo off
set str=This string has a lot of spaces
echo %str%

set str=%str:=%
echo %str%

关于上述程序的关键是,:=操作符用于从字符串中删除所有空格。

以上命令产生以下输出。

This string has a lot of spaces
Thisstringhasalotofspaces


批处理替换一个字符串 - 批处理教程™

要用一个字符串替换子字符串,请使用字符串替换功能。

示例

@echo off
set str=This message needs changed.
echo %str%

set str=%str:needs=has%
echo %str%

关于上述程序中,通过语句str=%str:needs=has%将字符串'has'替换为'needs'

以上命令产生以下输出。

This message needs changed.
This message has changed.


批处理右字符串 - 批处理教程™

这用于从字符串的末尾提取字符。

示例

@echo off
set str=This message needs changed.
echo %str%

set str=%str:~-8%
echo %str%

关于上面的程序要注意的是,字符串的右侧是通过使用~-字符来提取操作符。

以上命令产生以下输出。

This message needs changed.
changed.


批处理数组 - 批处理教程™

数组类型并没有明确定义为批处理脚本中的类型,但可以实现。 在批处理脚本中实现数组时需要注意以下几点。

  • 数组中的每个元素都需要用set命令来定义。
  • for循环将需要遍历数组的值。

创建一个数组

一个数组是通过使用下面的set命令创建的。

set a[0]=1

其中0是数组的索引,1是分配给数组的第一个元素的值。
另一种实现数组的方法是定义一个值列表并遍历值列表。 以下示例显示了如何实现。

示例

@echo off
set list=1 2 3 4
(for %%a in (%list%) do (
echo %%a
))

以上命令产生以下输出 -

1
2
3
4

访问数组

可以使用下标语法从数组中检索值,并在数组的名称后面立即传递要检索的值的索引。

示例

@echo off
set a[0]=1
echo %a[0]%

在这个例子中,索引从0开始,第一个元素可以使用索引访问为0,第二个元素可以使用索引访问为1,依此类推。通过下面的例子来看看如何创建,初始化和访问数组 -

@echo off
set a[0]=1
set a[1]=2
set a[2]=3
echo The first element of the array is %a[0]%
echo The second element of the array is %a[1]%
echo The third element of the array is %a[2]%

以上命令产生以下输出 -

The first element of the array is 1
The second element of the array is 2
The third element of the array is 3

修改数组

要将一个元素添加到数组的末尾,可以使用set元素以及数组元素的最后一个索引。

示例

@echo off
set a[0]=1
set a[1]=2
set a[2]=3
Rem Adding an element at the end of an array
Set a[3]=4
echo The last element of the array is %a[3]%

以上命令产生以下输出 -

The last element of the array is 4

可以通过在给定索引处指定新值来修改数组的现有元素,如以下示例所示 -

@echo off
set a[0]=1
set a[1]=2
set a[2]=3
Rem Setting the new value for the second element of the array
Set a[1]=5
echo The new value of the second element of the array is %a[1]%

以上命令产生以下输出 -

The new value of the second element of the array is 5

迭代数组

遍历数组是通过使用for循环并遍历数组的每个元素来实现的。以下示例显示了一个可以实现数组的简单方法。

@echo off
setlocal enabledelayedexpansion
set topic[0]=comments
set topic[1]=variables
set topic[2]=Arrays
set topic[3]=Decision making
set topic[4]=Time and date
set topic[5]=Operators

for /l %%n in (0,1,5) do (
echo !topic[%%n]!
)

以下方面需要注意的事项 -

  • 数组中的每个元素都需要使用set命令专门定义。
  • for循环移动范围的/L参数用于迭代数组。

以上命令产生以下输出 -

Comments
variables
Arrays
Decision making
Time and date
Operators

数组的长度

数组的长度是通过遍历数组中的值列表完成的,因为没有直接的函数来确定数组中元素的数量。

@echo off
set Arr[0]=1
set Arr[1]=2
set Arr[2]=3
set Arr[3]=4
set "x=0"
:SymLoop

if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a "x+=1"
GOTO :SymLoop
)
echo "The length of the array is" %x%

以上命令产生以下输出 -

The length of the array is 4

在数组中创建结构

结构也可以在批处理文件中使用一点额外的编码来实现。 以下示例显示了如何实现这一点。

示例

@echo off
set len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set i=0
:loop

if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name=%cur.Name%
echo Value=%cur.ID%
set /a i=%i%+1
goto loop

上面的代码需要注意以下几点 -

  • 使用set命令定义的每个变量具有与数组的每个索引关联的2个值。
  • 变量i设置为0,以便可以遍历结构将数组的长度为3。
  • 总是检查i的值是否等于len的值,如果不是,则循环遍历代码。
  • 可以使用obj[%i%]表示法访问结构的每个元素。

以上命令产生以下输出 -

Name=Joe
Value=1
Name=Mark
Value=2
Name=Mohan
Value=3


批处理决策结构 - 批处理教程™

决策结构要求程序员指定一个或多个要由程序进行评估或测试的条件,以及如果条件被确定为True,则执行的语句或语句,以及可选地,如果 条件被确定为False。

编号

条件结构

描述

1

if语句

第一个决策语句是if语句。

2

if/else语句

下一个决策语句是if/else语句。

3

嵌套if语句

有时候,要求有多个嵌套的if语句。


批处理if语句 - 批处理教程™

第一个决策语句是if语句。 批处理脚本中if语句的一般形式如下所示 -

if(condition) do_something

本声明的一般工作是首先在if语句中评估一个条件。如果条件为真,则执行语句。 下图显示了if语句的流程。
977d8d15c765d1f9e2f912fb7921c19b.jpg

检查变量

批处理脚本中'if'语句的常见用法之一是检查在批处理脚本中设置的变量。 字符串和数字都可以对if语句进行评估。

检查整型变量
以下示例显示如何将“if”语句用于数字。

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
if %c%==15 echo "The value of variable c is 15"
if %c%==10 echo "The value of variable c is 10"

关于上述程序有两点需要说明 -

  • 第一个“if”语句检查变量c的值是否为15。如果是这样,那么它将回显一个字符串到命令提示符。
  • 由于语句中的条件 - 如果if %c% == 10 则打印变量c的值为10,但评估结果为false,所以此语句的echo部分将不会执行。

以上命令产生以下输出 -

The value of variable c is 15

检查字符串变量

以下示例显示如何将if语句用于字符串。

@echo off
SET str1=String1
SET str2=String2
if %str1%==String1 echo "The value of variable String1"
if %str2%==String3 echo "The value of variable c is String3"

关于上述程序有两点需要说明 -

  • 第一个“if”语句检查变量str1的值是否包含字符串“String1”。 如果是,那么它会在命令提示符下回显一个字符串。
  • 由于第二个“if”语句的条件评估为false,所以语句的echo部分将不会被执行。

以上命令产生以下输出 -

The value of variable String1

要注意的是,'if'语句中的评估是“区分大小写的”,与上面相同的程序稍作修改,如下例所示:在第一个语句中,我们改变了比较标准,以下程序的输出将不会产生任何结果。

@echo off
SET str1=String1
SET str2=String2
if %str1%==StrinG1 echo "The value of variable String1"
if %str2%==String3 echo "The value of variable c is String3"

检查命令行参数
“if”语句的另一个常见用途是用来检查传递给批处理文件的命令行参数的值。 以下示例显示如何使用“if”语句来检查命令行参数的值。

@echo off
echo %1
echo %2
echo %3
if %1%==1 echo "The value is 1"
if %2%==2 echo "The value is 2"
if %3%==3 echo "The value is 3"

关于上述程序有两点需要说明 -

  • 上面的程序假定在执行批处理脚本时会传递3个命令行参数。
  • 每个命令行参数与一个值进行比较。 如果标准通过,则字符串作为输出发送。

如果上面的代码被保存在一个名为test.bat的文件中并且程序被执行为 -

test.bat 1 2 3

以下将是上述程序的输出结果 -

1
2
3
"The value is 1"
"The value is 2"
"The value is 3"


批处理if/else语句 - 批处理教程™

下一个决策陈述是if/else语句。 以下是本声明的一般形式。

if (condition) (do_something) ELSE (do_something_else)

上述语句首先在“if”语句中评估一个条件。 如果条件为真,则执行后面的语句,并在else条件之前停止并退出循环。 如果条件为false,则执行else语句块中的语句,然后退出循环。 下图显示了'if'语句的流程。
f8ce12978c3df168c37895a2c044e251.jpg

检查变量

就像批处理脚本中的“if”语句一样,if-else也可以用于检查在批处理脚本中设置的变量。 字符串和数字都可以对“if”语句进行评估。

检查整型变量
以下示例显示如何将“if”语句用于数字。

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value")
if %c%==10 (echo "The value of variable c is 10") else (echo "Unknown value")

关于上述程序,有几点需要说明 -

  • 每个“if else”代码放在括号()中。 如果括号不是用于分隔"if"和"else"代码的代码,那么如果else语句不成立,那么这些语句就不会有效。
  • 在第一个“if else”语句中,if条件将评估为true。
  • 在第二个“if else”语句中,else条件将被执行,因为条件将被评估为false。

以上命令产生以下输出 -

"The value of variable c is 15"
"Unknown value"

检查字符串变量
对于字符串可以重复相同的示例。 以下示例显示如何将“if else”语句用于字符串。

@echo off
SET str1=String1
SET str2=String2

if %str1%==String1 (echo "The value of variable String1") else (echo "Unknown value")

if %str2%==String3 (echo "The value of variable c is String3") else (echo "Unknown value")

关于上述有几点需要注意 -

  • 第一个“if”语句检查变量str1的值是否包含字符串“String1”。 如果是这样,那么它会在命令提示符下回显一个字符串。
  • 由于第二个“if”语句的条件评估为false,所以语句的echo部分将不会被执行。

以上命令产生以下输出 -

"The value of variable String1"
"Unknown value"

检查命令行参数
'if else'语句也可以用于检查命令行参数。 以下示例显示如何使用“if”语句来检查命令行参数的值。

@echo off
echo %1
echo %2
echo %3
if %1%==1 (echo "The value is 1") else (echo "Unknown value")
if %2%==2 (echo "The value is 2") else (echo "Unknown value")
if %3%==3 (echo "The value is 3") else (echo "Unknown value")

如果上面的代码被保存在一个名为test.bat的文件中,则程序被执行为 -

test.bat 1 2 4

以下将是上述代码的输出 -

1
2
4
"The value is 1"
"The value is 2"
"Unknown value"

if defined

“if”语句的一个特例是“if defined”,用于测试变量是否存在。 以下是声明的一般语法。

if defined somevariable somecommand

以下是如何使用“if defined”语句的示例。

@echo off
SET str1=String1
SET str2=String2
if defined str1 echo "Variable str1 is defined"

if defined str3 (echo "Variable str3 is defined") else (echo "Variable str3 is not defined")

以下将是上述代码的输出 -

"Variable str1 is defined"
"Variable str3 is not defined"

if exists
“if”语句的另一个特例是“if exists”,用于测试文件是否存在。 以下是声明的一般语法。

If exist somefile.ext do_something

以下是如何使用“if exists”语句的示例。

@echo off
if exist C:\set2.txt echo "File exists"
if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")

假设在C驱动器中有一个名为set2.txt的文件,并且没有名为set3.txt的文件。 那么,以下将是上述代码的输出。

"File exists"
"File does not exist"


批处理嵌套if语句 - 批处理教程™

有时候,要求有多个嵌入的“if”语句。 以下是本声明的一般形式。

if(condition1) if (condition2) do_something

所以只有当条件1和条件2都满足时,才会执行do_something块中的代码。

以下是如何使用嵌套if语句的示例。

@echo off
SET /A a=5
SET /A b=10
if %a%==5 if %b%==10 echo "The value of the variables are correct"

以上命令产生以下输出。

"The value of the variables are correct"

if errorlevel
另一个特例是“if errorlevel”,它用于测试运行的最后一个命令的退出代码。 各种命令发出整数退出代码来表示命令的状态。 通常,如果命令成功完成,则命令通过传递0;如果命令失败,命令通过传递1。

以下是此语句的一般语法。

if errorlevel n somecommand

其中“n”是整数退出码之一。

goto语句

一般来说,批处理文件的执行是逐行进行的,每行依次运行命令。 但是,通常希望在跳过其他部分的同时执行批处理文件的特定部分。 跳转到特定部分的能力由“goto”命令(写成一个字)提供。 目标部分在开头用带冒号的名称标注。 因此,代码看起来像 -

...
goto :label
...some commands
:label
...some other commands

执行将跳过“一些命令”,并开始“其他一些命令”。 标签可以是脚本中任何地方的一行,包括在“goto”命令之前。“if”语句中经常出现“goto”命令。 例如,可能有一个类型的命令 -

if (condition) goto :label

以下是如何使用goto语句的示例。

@echo off
SET /A a=5

if %a%==5 goto :labela
if %a%==10 goto :labelb

:labela
echo "The value of a is 5"

exit /b 0

:labelb
echo "The value of a is 10"

执行上面示例代码,得到以下结果 -

"The value of a is 5"


批处理运算符 - 批处理教程™

运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。

在批处理脚本中,以下类型的操作符是可以执行的。

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 赋值运算符
  • 按位运算符

算术运算符

批处理脚本语言支持任何语言的普通算术运算符。 以下是可用的算术运算符。

算术运算符示例

运算符

描述

示例

+

两个操作数相加

1 + 2的结果为:3

-

从第一个减去第二个操作数

2 - 1的结果为:1

*

两个操作数的乘法

2 * 3的结果为:6

/

分母除以分子

3 / 2的结果为:1.5

%

模运算符,整数/浮点除法后的余数

3 % 2的结果为:1

关系运算符

关系运算符允许对象的比较。以下是可用的关系运算符。

关系运算符示例

运算符

描述

示例

EQU

测试两个对象之间的相等性

2 EQU 2的结果为:真

NEQ

测试两个对象之间的不相等性

3 NEQ 2的结果为:真

LSS

检查左对象是否小于右操作数

2 LSS 3的结果为:真

LEQ

检查左对象是否小于或等于右操作数

2 LEQ 3的结果为:真

GTR

检查左对象是否大于右操作数

3 GTR 2的结果为:真

GEQ

检查左对象是否大于或等于右操作数

3 GEQ 2的结果为:真

逻辑运算符

逻辑运算符用于评估布尔表达式。以下是可用的逻辑运算符。

批处理语言配备了一整套布尔逻辑运算符,如AND,OR,XOR,但只适用于二进制数字。 对于TRUE或FALSE也没有任何值。可用于条件的唯一逻辑运算符是NOT运算符。

运算符

描述

AND

这是逻辑的“和”运算符

OR

这是逻辑“或”运算符

NOT

这是逻辑的“非”运算符

逻辑运算符示例

赋值运算符

批处理脚本语言还提供了赋值操作符。 以下是可用的赋值运算符。

运算符

+=

这将右操作数相加到左操作数,并将结果分配给左操作数

Set /A a = 5; a += 3,结果为:8

-=

从左操作数中减去右操作数,并将结果赋给左操作数。

Set /A a = 5; a -= 3,结果为:8

*=

将右操作数与左操作数相乘,并将结果赋给左操作数。

Set /A a = 5; a *= 3,结果为:15

/=

将左操作数除以右操作数,并将结果赋给左操作数。

Set /A a = 6; a/ = 3,结果为:15

%=

将两个操作数取模,并将结果赋给左操作数

Set /A a = 5; a% = 3,结果为:2

赋值运算符示例

按位运算符

按位运算符也可以在批处理脚本中使用。 以下是可用的运算符。

  • & - 这是按位“和”运算符
  • | - 这是按位“或”运算符
  • ^ - 这是按位“异或”或“独占”或操作符

以下是展示这些运算符的真值表。
e8e8f6d05fbdd5f538e14bc51def2568.jpg

按位运算符示例


批处理算术运算符示例 - 批处理教程™

批处理脚本语言支持普通算术运算符。以下代码片段显示了如何使用各种运算符。

示例

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a%+%b%
echo %c%
SET /A c=%a%-%b%
echo %c%
SET /A c=%b%*%a%
echo %c%
SET /A c=%b%/%a%
echo %c%
SET /A c=%b% %% %a%
echo %c%

执行上面示例代码,得到以下结果 -

15
-5
50
2
0


批处理关系运算符示例 - 批处理教程™

批处理脚本语言支持关系运算符。以下代码片段显示了如何使用关系运算符。

示例

@echo off
SET /A a=5
SET /A b=10
if %a% EQU %b% echo A is equal to than B
if %a% NEQ %b% echo A is not equal to than B
if %a% LSS %b% echo A is less than B
if %a% LEQ %b% echo A is less than or equal B
if %a% GTR %b% echo A is greater than B
if %a% GEQ %b% echo A is greater than or equal to B

执行上面示例代码,得到以下结果 -

A is not equal to than B
A is less than B
A is less than or equal B


批处理逻辑运算符示例 - 批处理教程™

批处理脚本语言支持逻辑运算符。逻辑运算符用于评估布尔表达式。

批处理语言配备了一整套布尔逻辑运算符,如AND,OR,XOR,但只适用于二进制数字。 对于TRUE或FALSE也没有任何值。 可用于条件的唯一逻辑运算符是NOT运算符。

为非二进制数字实现AND/OR运算符的最简单方法是使用嵌套的IF条件。 以下示例显示了如何实现。

以下代码片段显示了如何使用逻辑运算符。

示例

@echo off
SET /A a=5
SET /A b=10
IF %a% LSS 10 (IF %b% GTR 0 (ECHO %a% is less than 10 AND %b% is greater than 0))

执行上面示例代码,得到以下结果 -

5 is less than 10 AND 10 is greater than 0

以下是可以使用IF语句实现的AND操作的示例。

示例

@echo off
SET /A a=5
SET /A b=10

IF %a% GEQ 10 (
IF %b% LEQ 0 (
ECHO %a% is NOT less than 10 OR %b% is NOT greater than 0
) ELSE (
ECHO %a% is less than 10 OR %b% is greater than 0
)
) ELSE (
ECHO %a% is less than 10 OR %b% is greater than 0
)

执行上面示例代码,得到以下结果 -

5 is less than 10 AND 10 is greater than 0

以下是如何使用NOT运算符的例子。

@echo off
SET /A a=5
IF NOT %a%==6 echo "A is not equal to 6"

执行上面示例代码,得到以下结果 -

"A is equal to 5"


批处理赋值运算符示例 - 批处理教程™

批处理脚本语言还提供了赋值运算符。

以下代码片段显示了如何使用各种运算符。

示例

@echo off
SET /A a=5
SET /A a+=5
echo %a%
SET /A a-=5
echo %a%
SET /A a*=5
echo %a%
SET /A a/=5
echo %a%
SET /A a%=5
echo %a%

执行上面示例代码,得到以下结果 -

10
5
25
5
5


批处理shift运算符 - 批处理教程™

命令行参数的一个限制是它只能接受直到%9的参数。 下面来举一个限制的例子。

示例

@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10

如果上面的代码存储在一个名为test.bat的文件中,并且该文件运行为 -

test.bat a b c d e f g h i j

接下来将是输出 -

a
b
c
d
e
f
h
i
a0

从上面的输出中可以看出,应该显示为“j”的最终值显示为a0。 这是因为没有参数被称为%10。

通过使用SHIFT运算符可以避免此限制。 在批处理文件处理完第一个参数之后,可以将它们SHIFT(只是用SHIFT命令插入一行),结果是%1得到值b,%2得到值c,等等,直到%9, 现在得到值j。继续这个过程,直到至少%9为空。

我们来看一个如何使用SHIFT运算符来克服命令行参数限制的例子。

示例

@ECHO OFF
:Loop

IF "%1"=="" GOTO Continue
echo %1%
SHIFT
GOTO Loop
:Continue

如果上面的代码存储在一个名为test.bat的文件中,并且该文件运行为 -

test.bat a b c d e f g h i j

如下输出结果 -

a
b
c
d
e
f
h
i
j

注意
命令行中的某些字符被批处理文件忽略,具体取决于DOS版本,它们是否被“转义”,通常取决于它们在命令行中的位置 -

  • 逗号(,)被替换为空格,除非它们是双引号中的字符串的一部分。
  • 分号(;)被替换为空格,除非它们是双引号中的字符串的一部分。
  • =字符有时被空格替换,而不是在双引号中是字符串的一部分。
  • 第一个正斜杠(/)只有紧跟在命令之后,才会被一个空格替换,而没有前导空格。
  • 多个空格被替换为一个空格,除非它们是双引号中的字符串的一部分。
  • 选项卡由一个空格替换。
  • 第一个命令行参数之前的空格将被忽略。
  • 最后一个命令行参数后面的空格将被修剪。


批处理日期时间 - 批处理教程™

DOS脚本中的日期和时间具有以下两个用于检索系统日期和时间的基本命令。

日期

该命令获取系统日期。

语法

DATE

示例

@echo off
echo %DATE%

当前日期将显示在命令提示符下。 例如,

C:\Users\Administrator>echo %DATE%
2018/01/24 周三

时间

该命令设置或显示时间。

语法

TIME

示例

@echo off
echo %TIME%

当前时间将显示在命令提示符下。 例如,

21:16:52.81

以下是一些可用于以不同格式获取日期和时间的实现。

日期格式化:年-月-日

示例

@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t=2&if "%date%z" LSS "A" set t=1

for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

以上命令产生以下输出 -

Today is: 2017-12-30


批处理输入输出 - 批处理教程™

有三个键盘输入的通用“文件”,在屏幕上打印文本和在屏幕上打印错误。 标准输入文件(stdin)包含程序/脚本的输入。 标准输出(Standard Out)文件(stdout)被用来写输出以显示在屏幕上。 最后一种叫作stderr的“标准错误”文件包含用于显示在屏幕上的任何错误消息。

这三个标准文件中的每一个(也称为标准流)分别使用数字0,1和2进行引用。Stdin是文件0,stdout是文件1,stderr是文件2。

重定向输出(Stdout和Stderr)

批处理文件中的一种常见做法是将程序的输出发送到日志文件。 >运算符将stdout或stderr发送或重定向到另一个文件。 以下示例显示了如何完成此操作。

dir C:\ > list.txt

在上面的例子中,命令dir C:\ 的stdout被重定向到文件list.txt。

如果将数字2附加到重定向过滤器,则会将stderr重定向到文件lists.txt。例如 -

Dir C:\ 2 > list.txt

甚至可以使用文件编号和"&"前缀来组合stdout和stderr流。 以下是一个例子。

DIR C:\ > lists.txt 2> &1

抑制程序输出

伪文件NUL用于丢弃程序的任何输出。 以下示例显示通过将输出发送到NUL来丢弃命令DIR的输出。

Dir C:\ > NUL

STDIN

要使用Stdin,必须使用解决方法来实现此目的。这可以通过重定向命令提示符自己的标准输入(称为CON)来完成。

以下示例显示了如何将输出重定向到名为lists.txt的文件。 在执行下面的命令后,命令提示符会将用户输入的所有输入都保存到一个EOF字符中。 稍后,它将所有输入发送到文件lists.txt。

TYPE CON > lists.txt


批处理函数 - 批处理教程™

函数是组织在一起执行特定任务的一组语句。 在批处理脚本中,采用类似的方法将逻辑语句组合在一起形成一个函数。

像其他语言一样,批处理脚本中的函数也遵循相同的程序规则 -

  • 函数声明 - 它告诉编译器一个函数的名字,返回类型和参数。
  • 函数定义 - 它提供了函数的实际主体。

函数定义

在批处理脚本中,通过使用标签语句来定义函数。 当一个函数被重新定义时,它可能会将一个或多个值作为函数的输入“参数”,并在函数的主体中处理,并将值作为输出“返回类型”传回给函数。

每个函数都有一个函数名称,它描述了函数执行的任务。 要使用一个函数,需要用它的名称来“调用”这个函数,并传递与函数参数类型相匹配的输入值(称为参数)。

以下是一个简单函数的语法。

:function_name
Do_something
EXIT /B 0

其中,

  • function_name是赋予函数的名字,它应该与函数的实际功能相匹配。
  • EXIT语句用于确保函数正常退出。

以下是一个简单函数的例子。

:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0

常见的函数使用,如下列表所示 -

编号

函数

描述

1

调用函数

在批处理脚本中如何使用call命令调用一个函数

2

带参数的函数

当函数调用时,函数可以通过传递参数来处理参数。

3

具有返回值的函数

函数可以通过传递变量名称来处理返回值

4

函数中的局部变量

函数中的局部变量可以用来避免名称冲突,并保持函数本地的变量变化。

5

递归函数

通过在函数中保持局部变量的变化并且对调用者不可见,完全封装函数主体的能力。

6

文件I/O

在批处理脚本中,可以执行任何编程语言中预期的正常文件I/O操作。

7

创建文件

新文件的创建是通过重定向过滤器>来完成的。 此过滤器可用于将任何输出重定向到文件。

8

写入文件

内容写入文件也是借助于重定向过滤器来完成的。 此过滤器可用于将任何输出重定向到文件。

9

附加到文件

内容写入文件也是在双重定向过滤器的帮助下完成的。 此过滤器可用于将任何输出附加到文件。

10

从文件读取

在批处理脚本中读取文件是通过使用FOR循环命令来完成文件中需要读取的每一行。

11

删除文件

要删除文件,批处理脚本提供了DEL命令。

12

重命名文件

要重命名文件,批处理脚本提供了REN或RENAME命令。

13

移动文件

要移动文件,批处理脚本提供MOVE命令。

14

批处理文件-管道

管道运算符(竖线)将一个命令的输出(默认为STDOUT)引导到另一个命令的输入(默认为STDIN)。

15

批处理文件-输入

批处理文件运行时,可以选择传递命令行参数,然后在程序中读取这些参数以进一步处理。

16

使用SHIFT运算符

命令行参数的一个限制是它只能接受直到%9的参数。

17

文件夹操作

在批处理脚本中,可以使用任何编程语言执行普通的基于文件夹的操作。

18

创建文件夹

创建一个文件夹是在MD(创建目录)命令的帮助下完成的。

19

列出文件夹内容

文件夹内容的列表可以用dir命令完成。 该命令用来查看当前目录中的可用文件和目录。

20

删除文件夹

要删除文件夹,可使用批处理脚本提供的DEL命令。

21

重命名文件夹

对于重命名文件夹,批处理脚本使用REN或RENAME命令。

22

移动文件夹

对于移动文件夹,批处理脚本提供MOVE命令。


批处理调用函数 - 批处理教程™

在批处理脚本中使用call命令来调用一个函数。 以下是调用函数的语法。

call :function_name

以下示例显示了如何从主程序调用一个函数。

@echo off
SETLOCAL
CALL :Display
EXIT /B %ERRORLEVEL%
:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0

定义主程序时需要注意的一点是确保在主程序中放入EXIT / B%ERRORLEVEL%语句,以便将主程序的代码与函数分开。

以上命令产生以下输出 -

The value of index is 2


批处理具有参数的函数 - 批处理教程™

当函数调用时,函数可以通过传递参数来处理参数。

Call :function_name parameter1, parameter2… parametern

然后可以通过使用代字符(~)字符以及参数的位置,来在函数内部访问参数。

以下示例显示了如何使用参数调用函数。

@echo off
SETLOCAL
CALL :Display 5 , 10
EXIT /B %ERRORLEVEL%
:Display
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
EXIT /B 0

如上例所示,使用~1来访问发送给函数的第一个参数,同样使用~2来访问第二个参数。

以上命令产生以下输出 -

The value of parameter 1 is 5
The value of parameter 2 is 10


批处理具有返回值的函数 - 批处理教程™

函数可以通过简单地传递变量名称来处理返回值,这些变量名称将在调用该函数时保存返回值,如下所示 -

Call :function_name value1, value2… valuen

使用set命令和代字号(~)字符以及参数的位置编号在函数中设置返回值。

以下示例显示了如何使用返回值调用函数。

@echo off
SETLOCAL
CALL :SetValue value1,value2
echo %value1%
echo %value2%
EXIT /B %ERRORLEVEL%
:SetValue
set "%~1=5"
set "%~2=10"
EXIT /B 0

以上命令产生以下输出 -

5
10


批处理函数中局部变量 - 批处理教程™

函数中的局部变量可以用来避免名称冲突,并保持函数本地的变量变化。 SETLOCAL命令首先用于确保命令处理器对所有环境变量进行备份。 通过调用ENDLOCAL命令可以恢复变量。 在两者之间进行的更改是当前批处理脚本的本地处理。 当到达批处理文件结束时,即通过调用GOTO:EOF,ENDLOCAL被自动调用。

使用SETLOCAL对变量进行本地化允许在函数中自由使用变量名称,而不必担心与函数外使用的变量的名称冲突。

以下示例显示了如何在函数中使用局部变量。

@echo off
set str=Outer
echo %str%
CALL :SetValue str
echo %str%
EXIT /B %ERRORLEVEL%
:SetValue
SETLOCAL
set str=Inner
set "%~1=%str%"
ENDLOCAL
EXIT /B 0

在上面的程序中,变量str被定位在函数SetValue中。 因此,即使str值被返回到main函数,main函数中str的值也不会被函数返回的值替换。

以上命令产生以下输出。

Outer
Outer


批处理递归函数 - 批处理教程™

通过在函数中保持局部变量的变化并且对调用者不可见,完全封装函数主体的能力。 我们现在可以递归地调用一个函数,确保每个级别的递归都可以使用自己的一组变量,即使变量名被重用。

下面的例子展示了如何使用递归函数。

示例

这个例子展示了如何递归地计算一个斐波那契数。 当斐波那契算法达到一个大于或等于给定输入数的数时,递归停止。 该示例以数字0和1开头,myFibo函数递归调用以计算下一个斐波那契数,直到找到斐波那契数大于或等于1000000000。

myFibo函数的第一个参数是要存储输出的变量的名称。该变量必须初始化为以开始的斐波那契数,并将在调用该函数时用作当前斐波那契数,并设置为后续函数的斐波那契数。

@echo off
set "fst=0"
set "fib=1"
set "limit=1000000000"
call:myFibo fib,%fst%,%limit%
echo.The next Fibonacci number greater or equal %limit% is %fib%.
echo.&pause&goto:eof
:myFibo -- calculate recursively
:myFibo -- calculate recursively the next Fibonacci number greater or equal to a limit
SETLOCAL
set /a "Number1=%~1"
set /a "Number2=%~2"
set /a "Limit=%~3"
set /a "NumberN=Number1 + Number2"

if /i %NumberN% LSS %Limit% call:myFibo NumberN,%Number1%,%Limit%
(ENDLOCAL
IF "%~1" NEQ "" SET "%~1=%NumberN%"
)goto:eof

以上命令产生以下输出。

The next Fibonacci number greater or equal 1000000000 is 1134903170.


批处理文件夹操作 - 批处理教程™

在批处理脚本中,可以使用任何编程语言执行普通的基于文件夹的操作。

以下是一些可以在文件夹上执行的操作。

  • 创建文件夹
  • 列出文件夹
  • 遍历文件夹中的文件
  • 删除文件夹
  • 重命名文件夹


批处理创建文件夹 - 批处理教程™

创建一个文件夹是在MD(Make directory)命令的帮助下完成的。

语法

MKDIR [drive:]path
MD [drive:]path

下面来看看如何使用MD命令的一些例子。

示例

以下命令将在当前目录中创建一个名为test的目录。

md test

上面的命令将在C驱动器中创建一个名为test的目录。

md C:\test

如果文件夹名称中有空格,则文件夹名称应该用引号引起来。

md "Test A"

下命令以递归方式创建目录,

mkdir \a\b\c

与发出以下一组命令相同。

mkdir \a
chdir \a
mkdir b
chdir b
mkdir c


批处理列出文件夹内容 - 批处理教程™

文件夹内容的列表可以用dir命令完成。 该命令允许查看当前目录中的可用文件和目录。 dir命令还显示上次修改日期和时间以及文件大小。

语法

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

以下是上面语法中的选项的说明 -

  • [drive:][path][filename] -指定要列出的驱动器,目录或文件。
  • /A - 显示具有指定属性的文件。
  • attributes -
    • D - 目录
    • R - 只读文件
    • H - 隐藏的文件
    • A - 文件准备归档
    • S - 系统文件
    • I - 没有索引内容的文件
    • L - 重新分析点
    • 前缀的意思不是
  • /B - 使用裸格式(无标题信息或摘要)。
  • /C - 以文件大小显示千位分隔符,这是默认的。 使用/-C禁用分隔符的显示。
  • /D - 相同的宽度,但文件按列列表排序。
  • /L - 使用小写。
  • /N - 新的长列表格式,文件名在最右边。
  • /O - 按排序的文件列出。
  • sortorder - N - 按名称(字母),S - 按大小(最小的第一个),E - 按分机(按字母顺序),D - 按日期/时间(最早的第一个),G - 分组目录先。
  • /P - 每个屏幕后都暂停信息。
  • /Q - 显示文件的所有者。
  • /R - 显示文件的备用数据流。
  • /S - 显示指定目录和所有子目录中的文件。
  • /T - 控制字段显示或用于排序的时间。
  • timefield -
    • C - 创建时间
    • A - 上次访问时间
    • W - 最后书入时间
  • /W - 使用宽列表格式。
  • /X - 这将显示为非8dot3文件名称生成的短名称。 格式是/N的格式,在长名称之前插入短名称。 如果不存在短名称,则在其位置显示空白。
  • /4 - 显示四位数年份。

让我们来看看如何使用DIR命令的一些例子。

dir *.exe

以上命令列出以.exe文件扩展名结尾的所有文件。

dir *.txt *.doc

以上命令列出以.txt和.doc文件扩展名结尾的所有文件。

dir /ad

仅列出当前目录中的目录。 如果需要移动到列出的目录之一,请使用cd命令。

dir /s

列出所在的目录中的文件以及该目录之后的所有子目录。 如果根目录是“C:\>”,输入这个命令,这将会列出计算机C盘上的每个文件和目录。

dir /p

如果目录中有许多文件,并且在滚动时无法读取所有文件,则可以使用上述命令,一次显示所有文件。

dir /w

如果不需要文件信息,可以使用上面的命令只列出水平的文件和目录,只需要很少的空间。

dir /s /w /p

上面的命令将列出当前目录和子目录中的所有文件和目录,一次只能显示一个页面。


批处理删除文件夹 - 批处理教程™

要删除文件夹,可使用批处理脚本提供的DEL命令。

语法

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

以下是DEL命令的选项的描述。

  • names - 指定一个或多个文件或目录的列表。 通配符可能被用来删除多个文件。 如果指定了一个目录,则该目录内的所有文件都将被删除。
  • /P - 提示在删除每个文件之前进行确认。
  • /F - 强制删除只读文件。
  • /S - 删除所有子目录中的文件。
  • /Q - 安静模式,不要询问是否可以删除全局通配符。
  • /A - 根据属性选择要删除的文件。
  • attributes - R - 只读文件,S - 系统文件,H - 隐藏文件,A - 文件准备归档。

我们来看一些DEL命令如何用于文件夹的例子。

示例

del Example

上述命令将删除当前工作目录中名为Example的文件夹。

del C:\Example

上述命令将删除C驱动器中名为Example的文件夹。

Del Example1 , Example2

上述命令将删除当前工作目录中名为Example1和Example2的文件夹。


批处理重命名文件夹 - 批处理教程™

要重命名文件夹,可使用批处理脚本提供的REN或RENAME命令。

语法

RENAME [drive:][path][directoryname1 | filename1] [directoryname2 | filename2]

我们来看一些重命名文件夹的例子。

示例

ren Example Example1

上面的命令将把当前工作目录中名为Example的文件夹重命名为Example1。

del C:\Example Example1

上面的命令会将C盘中名为Example的文件夹重命名为Example1。


批处理移动文件夹 - 批处理教程™

要移动文件夹,可使用批处理脚本提供的MOVE命令。

语法

MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

以下是MOVE命令的选项的描述。

  • [drive:][path]filename1 - 指定要移动的文件的位置和名称。
  • destination - 指定文件的新位置。 目标可以由驱动器号和冒号,目录名称或组合组成。 如果只移动一个文件,则在移动文件时,如果要重命名文件,也可以包含一个文件名。
  • [drive:][path]dirname1 - 指定要重命名的目录。
  • dirname2 - 指定目录的新名称。
  • /Y - 禁止提示以确认要覆盖现有的目标文件。
  • /-Y - 导致提示确认要覆盖现有的目标文件。

我们来看一些移动文件夹的例子。

示例

move *.* C:\Example

上述命令将所有文件从当前目录移动到文件夹C:\Example。

del C:\Example Example1

上面的命令会将C盘中名为Example的文件夹重命名为Example1。

move *.txt C:\Example

上述命令将所有带有.txt扩展名的文件从当前目录移动到文件夹C:\Example。

move C:\old\*.* C:\Example

上述命令将所有文件从C盘中的old文件夹移动到文件夹C:\Example。


批处理进程 - 批处理教程™

在本章中,我们将讨论批处理脚本中涉及的各种进程。

1. 查看正在运行的进程列表

在批处理脚本中,可以使用TASKLIST命令来获取系统中当前正在运行的进程的列表。

语法

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]

以下是TASKLIST命令的选项的说明。

  • /S system - 指定要连接的远程系统。
  • /U [domain]user - 指定命令应在其下执行的用户上下文。
  • /P [password] - 指定给定用户上下文的密码。 提示输入,如果省略。
  • /M [module] - 列出当前使用给定的exe / dll名称的所有任务。 如果未指定模块名称,则显示所有已加载的模块。
  • /SVC - 显示每个进程中托管的服务。
  • /V - 显示详细的任务信息。
  • /FI filter - 显示一组符合过滤器指定条件的任务。
  • /FO format - 指定输出格式。 有效值:TABLE,LIST,CSV。
  • /NH - 指定“列标题”不应显示在输出中。 仅适用于TABLE和CSV格式。

示例

TASKLIST

以上命令将获得本地系统上运行的所有进程的列表。 以下是当上面的命令按原样运行时所呈现的输出的快照。 正如你从下面的输出中看到的,不仅可以获得系统上运行的各种进程,还可以获得每个进程的内存使用情况。


映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 136 K
smss.exe 396 Services 0 936 K
csrss.exe 568 Services 0 4,524 K
wininit.exe 656 Services 0 5,328 K
csrss.exe 668 Console 1 4,884 K
winlogon.exe 764 Console 1 8,060 K
services.exe 884 Services 0 9,320 K
lsass.exe 892 Services 0 13,112 K
...... 进程太多了,此处省略部分~
svchost.exe 12092 Services 0 20,284 K
svchost.exe 10536 Services 0 9,520 K
chrome.exe 11416 Console 1 212,284 K
chrome.exe 4564 Console 1 10,520 K
chrome.exe 9824 Console 1 10,320 K
chrome.exe 11984 Console 1 98,216 K
chrome.exe 12080 Console 1 23,632 K
svchost.exe 10920 Services 0 8,608 K
svchost.exe 1656 Services 0 6,948 K
tasklist.exe 2456 Console 1 8,044 K

示例2

tasklist > process.txt

以上将tasklist命令的输出显示保存到process.txt文件中。

tasklist /fi "memusage gt 40000"

以上命令只能获取内存大于40MB的进程。 以下是示例的输出。

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
svchost.exe 1936 Services 0 73,556 K
Memory Compression 2032 Services 0 149,736 K
java.exe 8944 Services 0 62,328 K
explorer.exe 9544 Console 1 105,484 K
ShellExperienceHost.exe 10028 Console 1 57,696 K
SearchUI.exe 10160 Console 1 64,624 K
chrome.exe 11416 Console 1 203,356 K
chrome.exe 11984 Console 1 97,624 K
chrome.exe 11360 Console 1 309,812 K
QQ.exe 11672 Console 1 182,020 K
WeChat.exe 4952 Console 1 58,820 K
chrome.exe 1240 Console 1 80,776 K
chrome.exe 10280 Console 1 133,196 K
chrome.exe 10684 Console 1 108,056 K
chrome.exe 4644 Console 1 48,396 K
chrome.exe 2232 Console 1 97,652 K

2. 杀死/终止一个进程

允许运行Microsoft Windows XP Professional,Windows 2003或更高版本的用户通过进程ID(PID)或映像名称从Windows命令行中终止任务。 杀死/终止一个进程的命令是TASKILL命令。

语法

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter]
[/PID processid | /IM imagename] } [/T] [/F]

以下是TASKKILL命令的选项的描述。

  • /S system - 指定要连接的远程系统
  • /U [domain]user - 指定命令应在其下执行的用户上下文。
  • /P [password] - 指定给定用户上下文的密码。 提示输入,如果省略。
  • /FI FilterName - 应用过滤器来选择一组任务,允许使用*通配符。
  • /PID processID - 指定要终止的进程的PID。使用TaskList来获取PID。
  • /IM ImageName - 指定要终止的进程的映像名称。 通配符*可用于指定所有任务或图像名称。
  • /T - 终止指定的进程以及由其启动的任何子进程。
  • /F - 指定强制终止进程。

示例

taskkill /f /im notepad.exe

如果打开记事本,上面的命令杀死(终止)打开的记事本任务。

taskill /pid 9901

上面的命令杀死了一个ID为9901的进程。

3. 启动一个新的过程

DOS脚本也可以完全启动一个新的进程。这是通过使用START命令来实现的。

语法

START "title" [/D path] [options] "command" [parameters]

其中,

  • title - CMD窗口标题栏的文本(必需)
  • path - 起始目录。
  • command - 命令,批处理文件或可执行程序运行。
  • parameters - 传递给命令的参数。

以下是START命令的选项的描述。

  • /MIN - 启动窗口最小化。
  • /MAX - 启动窗口最大化。
  • /LOW - 使用IDLE优先级。
  • /NORMAL - 使用NORMAL优先级。
  • /ABOVENORMAL - 使用ABOVENORMAL优先级。
  • /BELOWNORMAL - 使用BELOWNORMAL优先级。
  • /HIGH - 使用HIGH优先级。
  • /REALTIME - 使用REALTIME优先级。

示例

START "Test Batch Script" /Min test.bat

上述命令将在新窗口中运行批处理脚本test.bat。 窗口将以最小化模式启动,并且指定标题为:“Test Batch Script”。

START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"

上述命令实际上将在另一个进程中运行Microsoft Word,然后在MS Word中打开文件TESTA.txt。


批处理别名 - 批处理教程™

别名表示现有命令创建快捷键或关键字。 假设想要执行下面的命令,不是使用/w选项的目录列表命令,而不是在目录列表中显示所有必要的细节。

dir /w

假设如果要创建这个命令的快捷方式如下。

dw=dir /w

当要执行dir /w命令时,可以简单地键入dw这个单词。dw这个词现在已经成为命令dir /w的别名。

创建别名

别名通过使用doskey命令进行管理。

语法

DOSKEY [options] [macroname=[text]]

其中,

  • macroname - 宏的简称。
  • text - 要调用的命令。

以下是DOSKEY命令的选项的说明。

编号

选项

描述

1

/REINSTALL

安装Doskey的新副本

2

/LISTSIZE = size

设置命令历史缓冲区的大小。

3

/MACROS

显示所有Doskey宏。

4

/MACROS:ALL

显示所有具有Doskey宏的可执行文件的所有Doskey宏。

5

/MACROS:exename

显示给定可执行文件的所有Doskey宏。

6

/HISTORY

显示存储在内存中的所有命令。

7

/INSERT

指定键入的新文本以旧文本插入。

8

/OVERSTRIKE

指定新文本覆盖旧文本。

9

/EXENAME = exename

指定可执行文件。

10

/MACROFILE = filename

指定要安装的宏的文件。

11

macroname

指定创建的宏的名称。

12

text

指定要录制的命令。

示例

创建一个名为keys.bat的新文件,并在文件中输入以下命令。 下面的命令会创建两个别名,一个是cd命令,它会自动进入名为test的目录。 另一个是dir命令。

@echo off
doskey cd=cd/test
doskey d=dir

当执行该命令,就可以在命令提示符下运行这些别名。

下面的截图显示了在上面创建的批处理文件被执行后,可以自由地输入d命令,它会给目录列表,这意味着别名已经被创建成功了。
2dec45f06fa80d4cc3b971b3240c0296.jpg

删除别名

通过将宏的值设置为NULL,可以删除别名或宏。

@echo off
doskey cd=cd/test
doskey d=dir
d=

在上面的例子中,首先将宏d设置为d = dir。 之后将其设置为NULL。 因为已经将d的值设置为NULL,所以宏d将被删除。

替换别名

可以通过将宏的值设置为新的期望值来替换别名或宏。

@echo off
doskey cd=cd/test
doskey d=dir

d=dir /w

在上面的例子中,首先将宏d设置为d = dir。 之后将其设置为dir /w。 由于已经将d的值设置为一个新的值,所以别名d现在将呈现新的值。


批处理设备 - 批处理教程™

Windows现在有一个改进的库,可以在批处理脚本中使用,以处理连接到系统的设备。 这就是所谓的设备控制台 - DevCon.exe。

Windows驱动程序开发人员和测试人员可以使用DevCon来验证是否正确安装并配置了驱动程序,包括正确的INF文件,驱动程序堆栈,驱动程序文件和驱动程序包。 也可以在脚本中使用DevCon命令(启用,禁用,安装,启动,停止和继续)来测试驱动程序。 DevCon是一个在本地计算机和远程计算机上执行设备管理功能的命令行工具。

显示驱动程序和设备信息DevCon可以显示本地计算机和远程计算机(运行Windows XP及更早版本)上的驱动程序和设备的以下属性 -

  • 硬件ID,兼容的ID和设备实例ID。 这些标识符在设备标识字符串中有详细的描述。
  • 设备设置类。
  • 设备设置类中的设备。
  • INF文件和设备驱动程序文件。
  • 驱动程序包的细节。
  • 硬件资源。
  • 设备状态。
  • 预期的驱动程序堆栈。
  • 驱动程序商店中的第三方驱动程序包。
  • 搜索设备DevCon可以通过硬件ID,设备实例ID或设备设置类在本地或远程计算机上搜索已安装和未安装的设备。
  • 更改设备设置DevCon可以通过以下方式更改本地计算机上即插即用(PnP)设备的状态或配置 -
    • 启用设备。
    • 禁用设备。
    • 更新驱动程序(交互式和非交互式)。
    • 安装一个设备(创建一个devnode并安装软件)。
    • 从设备树中删除设备并删除设备堆栈。
    • 重新扫描即插即用设备。
    • 添加,删除和重新排序根枚举设备的硬件ID。
    • 更改设备设置类的上部和下部过滤器驱动程序。
    • 从驱动程序存储添加和删除第三方驱动程序包。

DevCon(DevCon.exe)包含在为桌面应用程序安装WDK,Visual Studio和Windows SDK时。 DevCon.exe工具包在安装时位于以下位置。

%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe

语法

devcon [/m:\\computer] [/r] command [arguments]

其中,

  • /m:\\computer - 在指定的远程计算机上运行该命令。 反斜杠是必需的。
  • /r - 有条件的重启。 只有在需要重新启动以使更改生效时,才能在完成操作后重新启动系统。
  • command - 指定一个DevCon命令。
  • 要列出并显示计算机上的设备信息,请使用以下命令 -
    • DevCon HwIDs
    • DevCon Classes
    • DevCon ListClass
    • DevCon DriverFiles
    • DevCon DriverNodes
    • DevCon Resources
    • DevCon Stack
    • DevCon Status
    • DevCon Dp_enum
  • 要搜索有关计算机上设备的信息,请使用以下命令 -
    • DevCon Find
    • DevCon FindAll
  • 要操纵设备或更改其配置,请使用以下命令 -
    • DevCon Enable
    • DevCon Disable
    • DevCon Update
    • DevCon UpdateNI
    • DevCon Install
    • DevCon Remove
    • DevCon Rescan
    • DevCon Restart
    • DevCon Reboot
    • DevCon SetHwID
    • DevCon ClassFilter
    • DevCon Dp_add
    • DevCon Dp_delete

例子
以下是关于如何使用DevCon命令的一些示例。

List all driver files

以下命令使用DevCon DriverFiles操作来列出系统上的设备使用的驱动程序的文件名。 该命令使用通配符(*)来指示系统中的所有设备。 由于输出很广泛,因此该命令使用重定向字符(>)将输出重定向到参考文件driverfiles.txt。

devcon driverfiles * > driverfiles.txt

以下命令使用DevCon状态操作来查找本地计算机上所有设备的状态。 然后将状态保存在status.txt文件中以供日志记录或以后查看。 该命令使用通配符(*)表示所有设备,并使用重定向字符(>)将输出重定向到status.txt文件。

devcon status * > status.txt

以下命令通过在DevCon Enable命令中指定Printer Setup类来启用计算机上的所有打印机设备。 该命令包含/r参数,如果需要使系统有效,则重新引导系统。

devcon /r enable=Printer

以下命令使用DevCon安装操作在本地计算机上安装键盘设备。 该命令包含设备的INF文件(keyboard.inf)和硬件ID(* PNP030b)的完整路径。

devcon /r install c:\windows\inf\keyboard.inf *PNP030b

以下命令将扫描计算机中的新设备。

devcon scan

以下命令将重新扫描新设备的计算机。

devcon rescan


批处理注册表 - 批处理教程™

注册表是Windows系统的关键要素之一。 它包含有关操作系统各个方面的大量信息。 几乎所有安装在Windows系统上的应用程序都以某种形式与注册表交互。

注册表包含两个基本元素:键和值。 注册表项是与文件夹类似的容器对象。 注册表值是与文件类似的非容器对象。键可能包含值或其他键。 使用类似于Windows路径名称的语法来引用键,并使用反斜杠来指示层次结构的级别。

本章介绍查询值,添加,删除和编辑注册表中的值等各种功能。

编号

注册表的类型

描述

1

从注册表中读取

从注册表中读取是通过REG QUERY命令完成的。

2

添加到注册表中

添加到注册表是通过REG ADD命令完成的。

3

从注册表中删除

从注册表中删除是通过REG DEL命令完成的。

4

复制注册表项

从注册表复制是通过REG COPY命令完成的。

5

比较注册表项

比较注册表项是通过REG COMPARE命令完成的。


批处理从注册表中读取 - 批处理教程™

从注册表中读取是通过REG QUERY命令完成的。 此命令可用于从注册表中检索任何键的值。

示例

REG QUERY [ROOT\]RegKey /v ValueName [/s]
REG QUERY [ROOT\]RegKey /ve --This returns the (default) value

RegKey是需要在注册表中搜索的关键字。

示例

@echo off R
EG QUERY HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\

以上命令将查询注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ 下的所有键及其各自的值。

输出将显示注册表项下的所有键和值 -

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\

注册表中的这个位置有一些关于Windows系统的关键信息,例如系统目录位置。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
Directory REG_EXPAND_SZ %SystemRoot%
SystemDirectory REG_EXPAND_SZ %SystemRoot%\system32
NoInteractiveServices REG_DWORD 0x1
CSDBuildNumber REG_DWORD 0x4000
ShellErrorMode REG_DWORD 0x1
ComponentizedBuild REG_DWORD 0x1
CSDVersion REG_DWORD 0x0
ErrorMode REG_DWORD 0x0
CSDReleaseType REG_DWORD 0x0
ShutdownTime REG_BINARY 3AFEF5D05D46D101


批处理添加到注册表 - 批处理教程™

添加到注册表是通过REG ADD命令完成的。 请注意,为了向注册表添加值,需要在系统上拥有足够的权限才能执行此操作。

语法
REG ADD命令有以下变体。 在第二个变体中,没有为该键指定名称,并且将为该键添加“(默认)”的名称。

REG ADD [ROOT\]RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]
REG ADD [ROOT\]RegKey /ve [/d Data] [/f]

其中,

  • ValueName - 在选定的RegKey下的值,进行编辑。
  • /d Data - 要存储为“字符串”,整数等的实际数据。
  • /f - 强制更新而不提示“值存在,覆盖Y/N”。
  • /S Separator - 在REG_MULTI_SZ值中用作分隔符的字符。 默认值是"\0"。
  • /t DataType - 这些是根据注册表标准定义的数据类型,可以是 -
    • REG_SZ (默认)
    • REG_DWORD
    • REG_EXPAND_SZ
    • REG_MULTI_SZ

示例

@echo off
REG ADD HKEY_CURRENT_USER\Console /v Test /d "Test Data"
REG QUERY HKEY_CURRENT_USER\Console /v Test

在上面的例子中,第一部分是在注册表 - HKEY_CURRENT_USER\Console 下添加一个键。 这个键的名字是Test,分配给这个键的值是Test Data,它是默认的字符串类型。

第二个命令只是使用REG QUERY命令显示添加到注册表的内容。

以下将是上述方案的输出。 输出的第一行显示“添加”功能是成功的,第二个输出显示了注册表中的插入值。

The operation completed successfully.
HKEY_CURRENT_USER\Console
Test REG_SZ Test Data


批处理从注册表中删除 - 批处理教程™

从注册表中删除是通过REG DEL命令完成的。 请注意,为了从注册表中删除值,需要在系统上拥有足够的权限来执行此操作。

语法

REG DELETE命令有以下变体。 在第二个变体中,缺省值将被删除,在最后一个变体中,指定键下的所有值将被删除。

REG DELETE [ROOT\]RegKey /v ValueName [/f]
REG DELETE [ROOT\]RegKey /ve [/f]
REG DELETE [ROOT\]RegKey /va [/f]

其中,

  • ValueName - 在选定的RegKey下的值,进行编辑。
  • /f - 强制更新而不提示“值存在,覆盖Y/N”。

示例

@echo off
REG DELETE HKEY_CURRENT_USER\Console /v Test /f
REG QUERY HKEY_CURRENT_USER\Console /v Test

在上面的例子中,第一部分是删除注册表HKEY_CURRENT_USER\Console下的一个注册表项。 键的名称是Test。 第二个命令只是使用REG QUERY命令显示删除注册表的内容。 从这个命令,应该期待一个错误,只是为了确保键真正被删除了。

以下将是上述程序的输出。 输出的第一行显示“删除”功能成功,第二个输出显示错误,确认键确实已从注册表中删除。

The operation completed successfully.
ERROR: The system was unable to find the specified registry key or value.


批处理复制注册表项 - 批处理教程™

从注册表复制是通过REG COPY命令完成的。 请注意,为了从注册表复制值,您需要在系统上拥有足够的权限才能在源位置和目标位置上执行此操作。

语法

REG COPY [\\SourceMachine\][ROOT\]RegKey [\\DestMachine\][ROOT\]RegKey

示例

@echo off
REG COPY HKEY_CURRENT_USER\Console HKEY_CURRENT_USER\Console\Test
REG QUERY HKEY_CURRENT_USER\Console\Test

在上面的例子中,第一部分是将内容从位置HKEY_CURRENT_USER\Console复制到同一台机器上的HKEY_CURRENT_USER\Console\Test位置。 第二个命令用于查询新的位置,以检查是否所有的值都被正确复制。

以下是上述程序的输出。 输出的第一行显示“复制”功能是成功的,第二个输出显示了复制的位置中的值。

The operation completed successfully.
HKEY_CURRENT_USER\Console\Test
HistoryNoDup REG_DWORD 0x0
FullScreen REG_DWORD 0x0
ScrollScale REG_DWORD 0x1
ExtendedEditKeyCustom REG_DWORD 0x0
CursorSize REG_DWORD 0x19
FontFamily REG_DWORD 0x0
ScreenColors REG_DWORD 0x7
TrimLeadingZeros REG_DWORD 0x0
WindowSize REG_DWORD 0x190050
LoadConIme REG_DWORD 0x1
PopupColors REG_DWORD 0xf5
QuickEdit REG_DWORD 0x0
WordDelimiters REG_DWORD 0x0
ColorTable10 REG_DWORD 0xff00
ColorTable00 REG_DWORD 0x0
ColorTable11 REG_DWORD 0xffff00
ColorTable01 REG_DWORD 0x800000
ColorTable12 REG_DWORD 0xff


批处理比较注册表项 - 批处理教程™

比较注册表项是通过REG COMPARE命令完成的。

语法

REG COMPARE [ROOT\]RegKey [ROOT\]RegKey [/v ValueName] [Output] [/s]
REG COMPARE [ROOT\]RegKey [ROOT\]RegKey [/ve] [Output] [/s]

示例

其中输出 - /od(仅差异)/os(仅匹配)/oa(全部)/on(不输出)。

@echo off
REG COMPARE HKEY_CURRENT_USER\Console HKEY_CURRENT_USER\Console\Test

上述程序将比较注册表项HKEY_CURRENT_USER\Console & HKEY_CURRENT_USER\Console\Test之间的所有值。输出结果如下 -

Result Compared: Identical
The operation completed successfully.

如果两个注册表项中的值存在差异,则会在输出中显示,如以下结果所示。 以下输出显示“EnableColorSelection”的值是额外的注册表项"HKEY_CURRENT_USERConsole"。

< Value: HKEY_CURRENT_USER\Console EnableColorSelection REG_DWORD 0x0
Result Compared: Different
The operation completed successfully.


批处理网络设置 - 批处理教程™

批处理脚本可以使用网络设置。 NET命令用于更新,修复或查看网络或网络设置。 本章介绍net命令可用的不同选项。

编号

命令

描述

1

NET ACCOUNTS

查看计算机的当前密码和登录限制。

2

NET CONFIG

显示当前的服务器或工作组设置。

3

NET COMPUTER

添加或删除附加到Windows域控制器的计算机。

4

NET USER

该命令可以用于查看特定用户帐户的详细信息。

5

NET STOP/START

该命令用于停止和启动特定的服务。

6

NET STATISTICS

显示工作站或服务器的网络统计信息。

7

NET USE

连接或断开计算机与共享资源或显示有关连接的信息。


批处理Net Accounts命令 - 批处理教程™

查看计算机的当前密码和登录限制。

语法

NET ACCOUNT [/FORCELOGOFF:{minutes | NO}] [/MINPWLEN:length]
[/MAXPWAGE:{days | UNLIMITED}] [/MINPWAGE:days]
[/UNIQUEPW:number] [/DOMAIN]

其中,

  • FORCELOGOFF - 在规定时间内强制注销当前用户。
  • MINPWLEN - 这是为用户提供的最小密码长度设置。
  • MAXPWAGE - 这是为用户提供的最大密码使用期限设置。
  • MINPWAGE - 这是为用户提供的最小密码使用期限设置。

输出

C:\Users\Administrator>NET ACCOUNTS
强制用户在时间到期之后多久必须注销?: 从不
密码最短使用期限(天): 0
密码最长使用期限(天): 42
密码长度最小值: 0
保持的密码历史记录长度: None
锁定阈值: 从不
锁定持续时间(分): 30
锁定观测窗口(分): 30
计算机角色: WORKSTATION
命令成功完成。


批处理Net Config命令 - 批处理教程™

显示当前的服务器或工作组设置。

语法

NET CONFIG

示例

NET CONFIG

输出

C:\Users\Administrator>NET CONFIG
控制下列正在运行的服务:

Server
Workstation

命令成功完成。


批处理Net User命令 - 批处理教程™

批处理Net User这个命令可以用于以下 -

  • 查看特定用户帐户的详细信息。
  • 添加一个用户帐户。
  • 删除用户的帐户。
  • 修改用户的帐户。

语法

Net user [username [password | *] [options]] [/DOMAIN]
username {password | *} /ADD [options] [/DOMAIN]
username [/DELETE] [/DOMAIN]

示例

NET USER

输出

以上命令显示了系统中定义的所有帐户。 以下是上述命令的输出。

User accounts for \\WIN-50GP30FGO75
-----------------------------------------------------------
Administrator atlbitbucket Guest
The command completed successfully.

以下命令显示了在系统上定义的Guest帐户的详细信息。

net user Guest

给出结果如下 -

User name Guest
Full Name
Comment Built-in account for guest access to the computer/domain
User's comment
Country/region code 000 (System Default)
Account active No
Account expires Never

Password last set 1/4/2016 9:34:25 AM
Password expires Never
Password changeable 1/4/2016 9:34:25 AM
Password required No
User may change password No

Workstations allowed All
Logon script
User profile
Home directory
Last logon Never

Logon hours allowed All

Local Group Memberships *Guests
Global Group memberships *None
The command completed successfully.


批处理Net stop/start命令 - 批处理教程™

该命令用于停止和启动特定的服务。

语法

Net stop/start [servicename]

示例

NET STOP Spooler

上述命令用于停止打印机后台处理程序服务。 以下是上述命令的输出。

The Print Spooler service is stopping.
The Print Spooler service was stopped successfully.
NET START Spooler

上述命令用于启动打印机后台处理程序服务。 以下是上述命令的输出。

The Print Spooler service is starting.
The Print Spooler service was started successfully.


批处理Net statistics命令 - 批处理教程™

该命令用于显示工作站或服务器的网络统计信息。

语法

Net statistics [SERVER/WORKSTATION]

示例

Net statistics Server

上述命令用于停止打印机后台处理程序服务。 以下是上述命令的输出。

Server Statistics for \\WIN-50GP30FGO75


Statistics since 1/3/2016 9:16:28 PM


Sessions accepted 0
Sessions timed-out 0
Sessions errored-out 0

Kilobytes sent 0
Kilobytes received 0

Mean response time (msec) 0

System errors 0
Permission violations 0
Password violations 0

Files accessed 0
Communication devices accessed 0
Print jobs spooled 0

Times buffers exhausted

Big buffers 0
Request buffers 0


批处理Net use命令 - 批处理教程™

该命令用于连接或断开计算机与共享资源或显示有关您的连接的信息。

语法

NET USE [devicename | *] [\\computername\sharename[\volume] [password | *]]
[/USER:[domainname\]username]
[/USER:[dotted domain name\]username]
[/USER:[username@dotted domain name]
[/SMARTCARD]
[/SAVECRED] [[/DELETE] | [/PERSISTENT:{YES | NO}]]

其中,

  • \\computername\sharename - 这是需要连接的份额的名称。
  • /USER - 这需要指定以确保在连接到网络共享时指定正确的凭据。

示例

net use z: \\computer\test

上述命令将连接到共享名\\computer\test并为其分配Z:驱动器名称。


批处理打印 - 批处理教程™

也可以通过NET PRINT命令从批处理脚本中控制打印。

语法

PRINT [/D:device] [[drive:][path]filename[...]]

其中,/D:device - 指定打印设备。

示例

print c:\example.txt /c /d:lpt1

上述命令将打印example.txt文件到并行端口lpt1。

命令行打印机控制

从Windows 2000开始,可以使用PRINTUI.DLL和RUNDLL32.EXE从Windows的命令行配置许多但不是全部的打印机设置

语法

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]

有一些可用的选项是以下 -

  • /dl - 删除本地打印机。
  • /dn - 删除网络打印机连接。
  • /dd - 删除打印机驱动。
  • /e - 显示打印首选项。
  • /f[file] - inf文件或输出文件。
  • /F[file] - INF文件使用/f指定的INF文件的位置。
  • /ia - 使用inf文件安装打印机驱动程序。
  • /id - 使用添加打印机驱动程序向导安装打印机。
  • /if - 使用inf文件安装打印机。
  • /ii - 使用添加打印机向导与inf文件安装打印机。
  • /il - 用添加打印机向导安装打印机。
  • /ip - 使用网络打印机安装向导安装打印机。
  • /k - 将测试页打印到指定的打印机,安装打印机时不能与命令组合。
  • /l[path] - 打印机驱动程序源路径。
  • /m[model] - 打印机驱动程序型号名称。
  • /n[name] - 打印机名称。
  • /o - 显示打印机队列视图。
  • /p - 显示打印机属性。
  • /Ss - 将打印机设置存储到文件中。
  • /Sr - 从文件恢复打印机设置。
  • /y - 将打印机设置为默认值。
  • /Xg - 获取打印机设置。
  • /Xs - 设置打印机设置。

测试打印机是否存在

有些情况下,可能会连接到网络打印机而不是本地打印机。 在这种情况下,在打印之前首先检查打印机是否存在是很有必要的。

可以使用RUNDLL32.EXE PRINTUI.DLL来评估打印机的存在,该文件用于控制大部分的打印机设置。

示例

SET PrinterName=Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q

IF EXIST "%file%" (
ECHO %PrinterName% printer exists
) ELSE (
ECHO %PrinterName% printer does NOT exists
)

上面的命令将执行以下操作 -

  • 它将首先设置打印机名称并设置将保存打印机设置的文件名。
  • RUNDLL32.EXE PRINTUI.DLL命令将用于通过将文件的配置设置发送到文件Prt.txt来检查打印机是否存在。


批处理脚本调试 - 批处理教程™

通常情况下,运行批处理文件时可能会遇到问题,而且大多数情况下都需要以某种方式调试批处理文件,以确定是批处理文件本身的问题。 以下是一些可以帮助调试批处理脚本文件的技术。

错误消息

要找出消息的来源,请按照下列步骤操作 -

第1步 - 移除REM @ECHO OFF,即REM @ECHO OFF或:: @ECHO OFF。
第2步 - 使用必要的命令行参数运行批处理文件,将所有输出重定向到日志文件以供以后比较。

test.bat > batch.log 2>&1

第3步 - 在文件batch.log中搜索错误消息

第4步 - 检查上一行是否有任何意外或无效的命令,命令行开关或值; 要特别注意命令中使用的任何环境变量的值。

第5步 - 纠正错误并重复此过程,直到所有错误消息都消失。

复杂的命令行

另一个常见的错误来源是不正确的重定向命令,例如,使用不正确的搜索字符串“嵌套” FIND或FINDSTR命令,有时在FOR / F循环中。

要检查这些复杂命令的有效性,请按照下列步骤操作 -

第1步 - 在使用复杂命令集的行之前插入“命令检查行”。

以下是插入ECHO命令以标记第一个TYPE命令的输出结束和下一个开始的位置的示例。

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

第2步 - 按照程序查找上述错误消息来源。

第3步 - 特别注意“简化”命令行的输出:预期格式的输出是什么? “令牌”值或位置是否如预期的那样?

子程序

生成错误消息的子例程在查找错误原因时会带来额外的“挑战”,因为它们可能在同一个批处理文件中被多次调用。

为了找出是什么导致不正确的调用子程序,请按照下列步骤 -

第1步 - 在脚本的开头添加并重置一个计数器变量 -

SET Counter=0

第2步 - 每次调用子程序时递增计数器,在子程序的开始插入以下行 -

SET /A Counter+=1

第3步 - 在计数器递增之后插入另一行,仅包含SET命令; 这将列出所有的环境变量及其值。

第4步 - 按照程序查找上述错误消息源。

Windows版本

如果打算将批处理文件分发给可能运行或不可运行相同Windows版本的其他计算机,则需要尽可能多的Windows版本测试批处理文件。

以下示例显示如何检查各种操作系统版本以检查相关的Windows版本。

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only


批处理脚本日志 - 批处理教程™

通过使用重定向命令可以在批处理脚本中进行登录。

语法

test.bat > testlog.txt 2> testerrors.txt

创建一个名为test.bat的文件,并在文件中输入以下命令。

net statistics /Server

上面的命令有一个错误,因为net statistics命令的选项是以错误的方式给出的。

输出

如果带有上面的test.bat文件的命令运行为 -

test.bat > testlog.txt 2> testerrors.txt

而打开文件testerrors.txt,会看到下面的错误。

The option /SERVER is unknown.

这个命令的语法是 -

NET STATISTICS
[WORKSTATION | SERVER]

通过键入NET HELPMSG 3506获取更多的帮助内容。

如果打开名为testlog.txt的文件,它会显示一个执行命令的日志。

C:\tp>net statistics /Server


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论