分享

批处理学习1

 菜园子图书馆 2014-02-04
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。

 

  那么,批处理文件有什么特点吗?

 

  首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

  其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。

  第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。

  第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

 

@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /Insert
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP


  批处理的作用:简单的说,批处理的作用就是自动的连续执行多条命令。

 

 

  下面,我将以编写一个简单的CTFMON修复批处理文件来讲解一下。

 

㈠,首先,我们要对基本的命令有一定的理解。如果没有一定的相关知识恐怕不容易看懂和理解批处理文件,也就更谈不上自己动手编写了。其次,我们要对CTFMON出现的常见的问题,有一定的了解,否则,将会无从下手。

 

CTFMON简单修复的批处理文件下载地址:

http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=3522651

 

 

批处理示例01:

@echo off
title 本程序仅用于 Windows XP Pro SP2 输入法的修复寒夜孤星【初学者】
color 2f
echo.
echo.
date /t
echo.
echo.
echo *************************************************************
echo *       本程序仅用于 Windows XP Pro SP2 输入法的修复        *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.
echo.
pause

 

 

效果:

 

批处理文件的编写1

 

  以上是这个批处理文件的第一部分,也是本节的重点部分。

 

1,第一行的“@echo off”是做什么的呢?

  简单的说,echo off,表示在此语句后所有运行的命令都不显示命令行本身。我们在批处理中将这一行去掉,对比一下显示,很快就会他们之间的效果区别。是的,这就是echo off的作用。有时候,我不需要了解太多,只要知道,使用这个命令以后,就会有这样的效果就可以了。

  这里还有一个问题,虽然使用了echo off,不显示以后的命令行本身,但还显示echo off自己,那么怎么不使用echo off显示出来呢?这就需要用到在命令之前包含 at 符号 (@),如所示:@ echo off

  @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。所以,当我们使用@echo off以后,就会不显示包括echo在内的所有命令行本身,同时,这样也有助于运行后的批处理文件界面美观整洁。

 

  下面,对echo 进行详细的介绍:

打开或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。

语法

echo [{on|off}] [message]

参数

{on | off
指定是否打开命令回显功能。
message
指定要在屏幕上显示的文本。
/?
在命令提示符显示帮助。

注释

  • 当回显关闭时可以使用 echo message 命令。要显示几行长的消息而不显示其他命令,可以在批处理程序的 echo off 命令后包含几个 echo message 命令。
  • 如果使用 echo off,屏幕上就不会出现命令提示符。要显示命令提示符,请键入 echo on
  • 要避免回显某行,请在批处理程序中的命令前面插入 at 符号 (@)。
  • 要在屏幕上回显空白行,请键入: echo
  • 当使用 echo 命令时,要显示管道 (|) 或重定向字符(< 或 >),请在管道 (|) 或重定向字符(例如,^>、^< 或 ^|)的前面使用脱字符 (^)。如果需要使用脱字符 (^),请键入两个脱字符 (^^)。

范例

以下范例显示的批处理程序包含前后各有一个空行的四行消息:

 

 

批处理示例02:

echo off
echo.
echo *************************************************************
echo *       本程序仅用于 Windows XP Pro SP2 输入法的修复        *
echo *                    寒夜孤星【初学者】                     *
echo *************************************************************
echo.

 

 

在相同命令行上可以使用 if 和 echo 命令,如下所示:例如:

if not exist %systemroot%\system32\CTFMON.EXE echo CTFMON文件不存在.

 

  到这里,我们明白了echo的几种常见的固定用法:

echo off         关闭回显,即不显示以后的命令行本身
echo.          空行

echo 要显示的内容     显示某个内容

echo on          打开回显,这个命令需要在使用了echo off才能使用。有关echo on的详细使用示例,将在以后的章节中介绍。

 

2,第二行中的“title 本程序仅用于……”是做什么的呢?

 

title,在实际使用中,是一个很简单的命令,为命令提示符窗口创建标题。其语法也很简单,就是在title 后面写要显示提示符窗口标题。


3,第三行中的“color 2f”是做什么的呢?

颜色 color

对于当前会话,更改命令提示窗口的前景和背景色。如果在不含参数的情况下使用,则 color 会将命令提示窗口的前景和背景色恢复成默认颜色。

语法

color [fb]

参数

fb
设置前景 f 和背景 g 颜色。下表列出了可以用作 fg 的值的十六进制数字。
  颜色
 0 黑色
 1 蓝色
 2 绿色
 3 湖蓝色
 4 红色
 5 紫色
 6 黄色
 7 白色
 8 灰色
 9 浅蓝色
 A 浅绿色
 B 浅水绿
 C 浅红色
 D 浅紫色
 E 浅黄色
 F 浅白色
/?
在命令提示符显示帮助。

注释

  • 要设置默认的命令提示窗口颜色,请单击命令提示窗口的左上角,单击“默认”,单击“颜色”选项卡,然后单击要用于“屏幕文字”和“屏幕背景”的颜色。
  • 对于当前会话,可以使用 cmd /t:fb 来更改命令提示窗口的颜色。
  • 如果前景和背景色相同,color 命令会将 ERRORLEVEL 设置为 1。

范例

要将命令提示窗口的前景色设为亮白色,将其背景色设为绿色,请键入:

color 2f

  所以,通过以上的表格,我们可以很容易明白,color 2f定义了这个批处理文件运行时窗口的背景为绿色,文字为亮白色。

 

4,第六行中的“date /t”是做什么的呢?

Date

显示当前系统日期设置。如果在不含参数的情况下使用,则 date 将显示当前系统日期设置并提示您键入新日期。

语法

date [mm-dd-yy] [/t]

参数

mm-dd-yy
设置指定日期,此处 mm 指月,dd 指天,yy 指年。
/t
显示当前日期,但不提示您键入新日期。
/?
在命令提示符显示帮助。

注释

  • 必须用句点 (.)、连字符 (-) 或斜线标记 (/) 将 mmdd 以及 yy 分隔。
  • mm 的有效值范围是从 1 到12。
  • dd 有效值范围是从 1 到 31。
  • yy 的有效值范围是从 80 到 99 或从 1980 到 2099。
  • 不论一个月有 28 天、29 天、30 天还是 31 天,Windows XP 都能自动更改月份和年份。

范例

要将日期更改成 2000 年 8 月 3 日,请键入下述命令之一:

08.03.00

08-03-00

08/03/00

要显示当前系统日期,请键入:

date /t

所以,对于一般的批处理文件,我们只使用date /t来显示当前的系统时间。

 

5,第十五行中的“pause”是做什么的呢?

pause,暂停批处理程序的处理并显示消息,提示用户按任意键继续。

语法

pause 

参数

/?
在命令提示符显示帮助。

注释

  • 运行 prompt 命令时,将显示下面的消息: 

    (英文版)Press any key to continue . . . . .

    (中文版)请按任意键继续 . . . .

  • 如果按 CTRL+C 停止批处理程序,则将显示下面的消息:

    英文版)Terminate batch job (Y/N)?

    (中文版)终止批处理操作吗 (Y/N)?

    按“Y”(代表“是”)响应这一消息,批处理程序将结束,控制返回到操作系统。因此,可以在不需要处理的批处理文件分段前插入 pause 命令。pause 暂停批处理程序的处理,您可以按 CTRL+C,然后键入 Y 停止批处理程序。

范例

要创建批处理程序,该批处理程序可提示用户更改某个驱动器中的磁盘,请键入:

 

 

批处理示例03:

@echo off
:begin
copy a:*.*
echo Please put a new disk into drive A
pause
goto begin

 

 

在此范例中,驱动器 A 中磁盘上的所有文件均复制到当前的目录中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。这种特殊的批程序在死循环中运行。goto BEGIN 命令将命令解释程序发送到批处理文件的开始标签。要停止该批处理程序,按下 CTRL+C 键然后按 Y 键。

  以上是微软给出的范例,这个是pause的一个主要用途。在我们初学批处理文件的过程中,他还有一个重要的作用,我们可以在批处理中加入多个pause,在每次挂起程序后,方便我们观察每个pause前的程序运行状况。例如:

 

 

 

批处理示例04:

@echo off
copy C:\TDDOWNLOAD\1.txt D:\TDDOWNLOAD

rem 复制文件夹C:\TDDOWNLOAD中的1.txt到文件夹D:\TDDOWNLOAD里

pause

copy C:\WINDOWS\2.txt

rem 复制文件夹C:\WINDOWS中的2.txt到本批处理文件同一文件夹下

pause

 

 

这样,在第一次暂停时,我们可以查看“复制文件夹C:\TDDOWNLOAD中的1.txt到文件夹D:\TDDOWNLOAD里”的操作是否成功。在第二次暂停时,我们可以再查看“复制文件夹C:\WINDOWS中的2.txt到本批处理文件同一文件夹下”是否成功。

 

5,“copy”是做什么的呢?

  在上一个范例中,我们看到了一个新的命令copy。那么,copy是做什么的呢?

 

 

copy

将一个或多个文件从一个位置复制到其他位置。

语法
copy [/d] [/v] [/n] [{/y|/-y}] [/z] [{/a|/b}] Source [{/a|/b}] [+ Source [{/a|/b}] [+ ...]][Destination [{/a|/b}]]

参数
/d
允许将复制的加密文件在目标处作为解密文件保存。
/v
验证是否正确写入新文件。
/n
在复制名字超过八个字符,或者文件扩展名超过三个字符的文件时使用短文件名(如果有的话)。
/y
禁止提示您确认要覆盖现存的目标文件。
/-y
提示您确认要覆盖现存的目标文件。
/z
在重启模式中复制网络文件。
/a
表明 ASCII 文本文件。
/b
表明二进制文件。
Source
必需指定要复制的文件或文件集的所在位置。source 可以由驱动器号和冒号、文件夹名、文件名或这几者的组合所组成。
Destination
必需指定要将文件或文件集复制到的位置。Destination 可以由驱动器号和冒号、文件夹名、文件名及这几者的组合所组成。
/?
在命令提示符显示帮助。
注释
可以复制那些使用文件结束字符 (CTRL+Z) 以表明文件结束的 ASCII 文本文件。
使用 /a
当在命令行的文件列表之前有 /a 时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b。

当 /a 在命令行上紧跟在文件列表之后时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b。

/a 参数的作用取决于它在命令行字符串中的位置。当 /a 紧随 Source 之后时,copy 会将文件当作 ASCII(文本)文件,并复制第一个文件结束符前的数据。

当 /a 紧随 Destination 之后时,copy 会添加文件结束符作为文件的最后一个字符。

使用 /b
/b 指定命令解释器读取目录中由文件大小指定的字节数。/b 是 copy 的默认值,除非 copy 用于合并文件。

当 /b 在命令行上位于文件列表之前时,它适用于所有已列出的文件,直到 copy 遇到 /a。在这种情况下,/a 应用于文件前面的 /a。

当 /b 在命令行上位于文件列表之后时,它适用于所有已列出的文件,直到 copy 遇到 /a。在这种情况下,/a 应用于文件前面的 /a。

/b 的作用取决于它在命令行字符串中的位置。当 /b 紧随 Source 之后时,copy 复制包含任何文件结束符的整个文件。

当 /b 紧随 Destination 之后时,copy 不会添加文件结束符。

使用 /v
如果写入操作不能校验,则会出现错误消息。尽管使用 copy 很少发生记录错误,但是仍可以使用 /v 来确保重要的数据已正确记录。因为要检查驱动器上记录的每一个扇区,所以该 /v 命令行选项也会使 copy 命令的运行速度减慢。

使用 /y 和 /-y
如果在 COPYCMD 环境变量中预先设置了 /y,可以通过在命令行使用 /-y 来替换该设置。默认情况下,在替换该设置时会提示您,除非该 copy 命令在批处理脚本中执行。

附属文件
要附加文件,请为 Destination 指定单个文件,但要为 Source 指定多个文件(使用通配符或 文件 1+文件 2+文件 3 的格式)。

使用 /z
如果在复制阶段连接丢失(例如,如果服务器脱机切断了连接),copy /z 将在重新建立连接后继续复制。/z 同时会显示每个文件已完成的复制操作的百分比。

复制到设备以及从设备复制
可以用设备名替换一次或多次出现的 source 或 destination。

在复制到设备时使用或省略 /b
当 destination 是设备时(例如,Com1 或 Lpt1),/b 将以二进制模式将数据复制到该设备。在二进制模式下,copy /b 会将所有字符(包括特殊字符,例如, CTRL+C、CTRL+S、CTRL+Z 以及换行符等)作为数据复制到设备。但是,如果省略了 /b,则将以 ASCII 模式将数据复制到设备。在 ASCII 模式下,特殊字符可能导致 Windows XP 在复制过程中合并文件。有关详细信息,请参阅“合并文件”。

使用默认目标文件
如果不指定目标文件,将使用与源文件相同的名称、创建日期、创建时间来创建副本,并将新副本置于当前驱动器的当前目录中。如果源文件位于当前驱动器的当前目录中,而您没有为目标文件指定其他驱动器或目录,则 copy 命令将终止并显示下列错误消息:

File cannot be copied onto itself

0 File(s) copied

合并文件
如果指定了使用加号 (+) 分隔的多个 source,copy 会将这些文件合并在单个文件之中。如果在 source 中使用了通配符(* 或 ?),但在 destination 中指定了单个文件名,则 copy 会将所有与 source 中的文件名匹配的文件合并,并使用在 destination 中指定的文件名来创建单个文件。除非使用了 /b 命令行选项,否则在任一种情形中,copy 都会假定合并的文件是 ASCII 文件。

复制零长度文件
Copy 不会复制 0 字节长度的文件。使用 xcopy 复制这些文件。

更改文件的时间和日期
如果要将当前的时间和日期指派给文件而不修改文件,请使用以下语法:

copy /b Source+,,

逗号表明省略了 Destination 参数。

在子目录中复制文件
要复制目录中的所有的文件和子目录,应该使用 xcopy 命令。有关 xcopy 的详细信息,请参阅“相关主题”。

故障恢复控制台提供了带有不同参数的 copy 命令。
范例
要将文件 Memo.doc 复制到当前目录中的 Letter.doc,并确保在复制的文件的末尾为文件结束符,请键入:

copy memo.doc letter.doc /a

要将文件 Robin.typ 从当前驱动器的当前目录复制到位于驱动器 C 上的现有目录 Birds 中,请键入:

copy robin.typ c:\birds

如果 Birds 目录不存在,Robin.typ 文件将被复制到驱动器 C 的磁盘根目录下名为 Birds 的文件中。

要将几个文件复制进一个文件,则需列出几个 Source 文件,并且文件名之间用加号 (+) 隔开,同时指定要包含合并结果文件的 Destination 文件。例如,要将位于当前驱动器的当前目录中的 Mar89.rpt、Apr89.rpt 以及 May89.rpt 合并,并将它们放在当前驱动器的当前目录下名为 Report 的文件中,请键入:

copy mar89.rpt + apr89.rpt + may89.rpt report

合并文件时,copy 会使用当前日期和时间来标记目标文件。如果省略 Destination,则文件被合并并且会使用首个指定的文件的名称存储。例如,要将所有的四个文件合并进 Report,而且已有名为 Report 的文件,请键入:

copy report + mar89.rpt + apr89.rpt + may89.rpt

还可通过使用通配符(* 或 ?)来将几个文件合并进一个文件。例如,在当前驱动器的当前目录中,要将所有具有 .exe 扩展名的文件合并进名为 Combin.doc 的文件中,请键入:

copy *.txt combin.doc

如果要使用通配符将几个二进制文件合并进一个文件,请添加 /b 命令行选项。这可防止 Windows XP 将 CTRL+Z 当作文件结束符处理。例如,键入:

copy /b *.exe combin.exe

 警告

如果合并二进制文件,结果文件可能因为内部格式而无法使用。
在下例中,copy 命令将每个带有 .txt 扩展名的文件和它对应的 .ref 文件合并起来。结果是文件名相同但扩展名为 .doc 的文件。copy 将 File1.txt 与 File1.ref 合并形成 File1.doc,然后 copy 将 File2.txt 与 File2.ref 合并形成 File2.doc,如此等等。例如,键入:

copy *.txt + *.ref *.doc

要合并所有具有 .txt 扩展名的文件,然后合并所有具有 .ref 扩展名的文件,并将合并结果置于 Combin.doc 文件中,请键入:

copy *.txt + *.ref combin.doc

 

 

所以,例如:

copy C:\TDDOWNLOAD\1.txt D:\TDDOWNLOAD

复制文件夹C:\TDDOWNLOAD中的1.txt到文件夹D:\TDDOWNLOAD里

copy C:\WINDOWS\2.txt

复制文件夹C:\WINDOWS中的2.txt到本批处理文件同一文件夹下

 

6,“rem”是做什么的呢?

  在上一个范例中,我们看到了另外一个新的命令rem。那么,rem是做什么的呢?

Rem

使您可以在批处理文件或配置文件中加入注释。

语法

rem [comment]

参数

comment
指定要作为注释的任何字符串。
/?
在命令提示符显示帮助。

注释

  • 使用 echo 命令显示注释

    rem 命令不在屏幕上显示注释。必须在批处理或 Config.nt 文件中使用 echo on 命令才能在屏幕上显示注释。

  • 对批处理文件注释的限制

    在批处理文件注释中不能使用重定向字符“(”或“)”或管道 (|)。

  • 使用 rem 增加垂直间距。

    尽管您可以使用没有注释的 rem 为批处理文件增加垂直间距,但也可以使用空行来增加间距。在处理批处理程序时会忽略空行。

范例

 

 

 

批处理示例05:

@echo off
copy C:\TDDOWNLOAD\1.txt D:\TDDOWNLOAD

rem 复制文件夹C:\TDDOWNLOAD中的1.txt到文件夹D:\TDDOWNLOAD里

pause

copy C:\WINDOWS\2.txt

:: 复制文件夹C:\WINDOWS中的2.txt到本批处理文件同一文件夹下

pause

 

 

  通过实际操作的对比,我们会理解:

①,rem后的内容不会被在执行过程显示,而echo后的则会。

②,rem是用来增加批处理文件文本中的垂直间隔,而echo.是增加批处理文件执行过程中显示时的垂直间隔的。

③,rem最大也是最主要的作用就是方便编辑批处理文件时,自己或别人通过rem后的内容来理解命令或程序的作用的。

④,小技巧:用::代替rem。

 

7,关于批处理文件中所使用命令的学习方法。

  本章节中介绍了,一些命令,再以后的章节中会介绍更多的命令。那么大家如何自己学写这些命令呢?实际上,windows系统为我们提供很好的平台。

 

  第一种方法:依次打开“开始菜单”—“帮助和支持”,在帮助和支持中心,我们可以在里面搜索很多关于计算机的知识,也包括批处理文件所使用的命令,如下图:

 

批处理文件的编写1

 

  第二种方法:依次打开“开始菜单”—“运行”,在运行里输入CMD。例如,我们想知道cls命令是做什么的,只需要输入cls /?,然后回车就可以了,显示“清除屏幕”,一个很简单又实用的命令。再比如,我们想知道copy的详细语法规则和说明,只需要再输入copy /?,然后回车,就一切ok了。如下图:

 

批处理文件的编写1

 

8,“cls”是做什么的呢?

  在上一示例中,我们在CMD窗口中可以进行各种命令的输入,但如果在不需要的时候想清理掉这些内容呢?其实很简单,输入cls,然后回车ok了!这一命令也可以在批处理文件中使用,但最好和pause等命令配合使用,否则执行起来的效果不怎么好……

 

cls

清除命令提示符窗口。

语法

cls

参数

/?
在命令提示符显示帮助。

范例

要清除显示在命令提示符窗口中的所有信息,并返回空窗口,请键入:

cls

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多