那么,批處理文件有什么特點(diǎn)嗎?
首先批處理文件是一個(gè)文本文件,這個(gè)文件的每一行都是一條DOS命令(大部分時(shí)候就好象我們在DOS提示符下執(zhí)行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文本文件編輯工具創(chuàng)建和修改批處理文件。
其次,批處理文件是一種簡單的程序,可以通過條件語句(if)和流程控制語句(goto)來控制命令運(yùn)行的流程,在批處理中也可以使用循環(huán)語句(for)來循環(huán)執(zhí)行一條命令。當(dāng)然,批處理文件的編程能力與C語言等編程語句比起來是十分有限的,也是十分不規(guī)范的。批處理的程序語句就是一條條的DOS命令(包括內(nèi)部命令和外部命令),而批處理的能力主要取決于你所使用的命令。
第三,每個(gè)編寫好的批處理文件都相當(dāng)于一個(gè)DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來使得它可以在任意位置運(yùn)行。一個(gè)良好的習(xí)慣是在硬盤上建立一個(gè)bat或者batch目錄(例如C:\BATCH),然后將所有你編寫的批處理文件放到該目錄中,這樣只要在path中設(shè)置上c:\batch,你就可以在任意位置運(yùn)行所有你編寫的批處理程序。
第四,在DOS和Win9x/Me系統(tǒng)下,C:盤根目錄下的AUTOEXEC.BAT批處理文件是自動運(yùn)行批處理文件,每次系統(tǒng)啟動時(shí)會自動運(yùn)行該文件,你可以將系統(tǒng)每次啟動時(shí)都要運(yùn)行的命令放入該文件中,例如設(shè)置搜索路徑,調(diào)入鼠標(biāo)驅(qū)動和磁盤緩存,設(shè)置系統(tǒng)環(huán)境變量等。下面是一個(gè)運(yùn)行于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 |
下面,我將以編寫一個(gè)簡單的CTFMON修復(fù)批處理文件來講解一下。
㈠,首先,我們要對基本的命令有一定的理解。如果沒有一定的相關(guān)知識恐怕不容易看懂和理解批處理文件,也就更談不上自己動手編寫了。其次,我們要對CTFMON出現(xiàn)的常見的問題,有一定的了解,否則,將會無從下手。
CTFMON簡單修復(fù)的批處理文件下載地址:
http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=3522651
批處理示例01: @echo off |
效果:
以上是這個(gè)批處理文件的第一部分,也是本節(jié)的重點(diǎn)部分。
1,第一行的“@echo off”是做什么的呢?
簡單的說,echo off,表示在此語句后所有運(yùn)行的命令都不顯示命令行本身。我們在批處理中將這一行去掉,對比一下顯示,很快就會他們之間的效果區(qū)別。是的,這就是echo off的作用。有時(shí)候,我不需要了解太多,只要知道,使用這個(gè)命令以后,就會有這樣的效果就可以了。
這里還有一個(gè)問題,雖然使用了echo off,不顯示以后的命令行本身,但還顯示echo off自己,那么怎么不使用echo off顯示出來呢?這就需要用到在命令之前包含 at 符號 (@),如所示:@ echo off
@與echo off相象,但它是加在每個(gè)命令行的最前面,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。所以,當(dāng)我們使用@echo off以后,就會不顯示包括echo在內(nèi)的所有命令行本身,同時(shí),這樣也有助于運(yùn)行后的批處理文件界面美觀整潔。
下面,對echo 進(jìn)行詳細(xì)的介紹:
打開或關(guān)閉請求回顯功能,或顯示消息。如果沒有任何參數(shù),echo 命令將顯示當(dāng)前回顯設(shè)置。
以下范例顯示的批處理程序包含前后各有一個(gè)空行的四行消息:
批處理示例02: echo off |
在相同命令行上可以使用 if 和 echo 命令,如下所示:例如:
if
到這里,我們明白了echo的幾種常見的固定用法:
echo off 關(guān)閉回顯,即不顯示以后的命令行本身
echo. 空行
echo 要顯示的內(nèi)容 顯示某個(gè)內(nèi)容
echo on 打開回顯,這個(gè)命令需要在使用了echo off才能使用。有關(guān)echo on的詳細(xì)使用示例,將在以后的章節(jié)中介紹。
2,第二行中的“title 本程序僅用于……”是做什么的呢?
title,在實(shí)際使用中,是一個(gè)很簡單的命令,為命令提示符窗口創(chuàng)建標(biāo)題。其語法也很簡單,就是在title 后面寫要顯示提示符窗口標(biāo)題。
3,第三行中的“color 2f”是做什么的呢?
對于當(dāng)前會話,更改命令提示窗口的前景和背景色。如果在不含參數(shù)的情況下使用,則 color 會將命令提示窗口的前景和背景色恢復(fù)成默認(rèn)顏色。
| 顏色 |
| 黑色 |
| 藍(lán)色 |
| 綠色 |
| 湖藍(lán)色 |
| 紅色 |
| 紫色 |
| 黃色 |
| 白色 |
| 灰色 |
| 淺藍(lán)色 |
| 淺綠色 |
| 淺水綠 |
| 淺紅色 |
| 淺紫色 |
| 淺黃色 |
| 淺白色 |
要將命令提示窗口的前景色設(shè)為亮白色,將其背景色設(shè)為綠色,請鍵入:
color 2f
所以,通過以上的表格,我們可以很容易明白,color 2f定義了這個(gè)批處理文件運(yùn)行時(shí)窗口的背景為綠色,文字為亮白色。
4,第六行中的“date /t”是做什么的呢?
顯示當(dāng)前系統(tǒng)日期設(shè)置。如果在不含參數(shù)的情況下使用,則 date 將顯示當(dāng)前系統(tǒng)日期設(shè)置并提示您鍵入新日期。
要將日期更改成 2000 年 8 月 3 日,請鍵入下述命令之一:
08.03.00
08-03-00
08/03/00
要顯示當(dāng)前系統(tǒng)日期,請鍵入:
date /t
所以,對于一般的批處理文件,我們只使用date /t來顯示當(dāng)前的系統(tǒng)時(shí)間。
5,第十五行中的“pause”是做什么的呢?
pause,暫停批處理程序的處理并顯示消息,提示用戶按任意鍵繼續(xù)。
(英文版)
Press any key to continue . . . . .
(中文版)請按任意鍵繼續(xù)
(英文版)Terminate batch job (Y/N)?
(中文版)終止批處理操作嗎 (Y/N)?
按“Y”(代表“是”)響應(yīng)這一消息,批處理程序?qū)⒔Y(jié)束,控制返回到操作系統(tǒng)。因此,可以在不需要處理的批處理文件分段前插入 pause 命令。pause 暫停批處理程序的處理,您可以按 CTRL+C,然后鍵入 Y 停止批處理程序。
要?jiǎng)?chuàng)建批處理程序,該批處理程序可提示用戶更改某個(gè)驅(qū)動器中的磁盤,請鍵入:
批處理示例03: @echo off |
在此范例中,驅(qū)動器 A 中磁盤上的所有文件均復(fù)制到當(dāng)前的目錄中。顯示的注釋提示您將另一張磁盤放入驅(qū)動器 A 時(shí),pause 命令會使程序掛起,以便您更換磁盤,然后按任意鍵繼續(xù)處理。這種特殊的批程序在死循環(huán)中運(yùn)行。goto BEGIN 命令將命令解釋程序發(fā)送到批處理文件的開始標(biāo)簽。要停止該批處理程序,按下 CTRL+C 鍵然后按 Y 鍵。
以上是微軟給出的范例,這個(gè)是pause的一個(gè)主要用途。在我們初學(xué)批處理文件的過程中,他還有一個(gè)重要的作用,我們可以在批處理中加入多個(gè)pause,在每次掛起程序后,方便我們觀察每個(gè)pause前的程序運(yùn)行狀況。例如:
批處理示例04: @echo off rem 復(fù)制文件夾C:\TDDOWNLOAD中的1.txt到文件夾D:\TDDOWNLOAD里 pause copy C:\WINDOWS\2.txt rem 復(fù)制文件夾C:\WINDOWS中的2.txt到本批處理文件同一文件夾下 pause |
這樣,在第一次暫停時(shí),我們可以查看“復(fù)制文件夾C:\TDDOWNLOAD中的1.txt到文件夾D:\TDDOWNLOAD里”的操作是否成功。在第二次暫停時(shí),我們可以再查看“復(fù)制文件夾C:\WINDOWS中的2.txt到本批處理文件同一文件夾下”是否成功。
5,“copy”是做什么的呢?
在上一個(gè)范例中,我們看到了一個(gè)新的命令copy。那么,copy是做什么的呢?
copy 將一個(gè)或多個(gè)文件從一個(gè)位置復(fù)制到其他位置。 語法 參數(shù) 當(dāng) /a 在命令行上緊跟在文件列表之后時(shí),它適用于所有已列出的文件,直到 copy 遇到 /b。在這種情況下,/b 應(yīng)用于文件前面的 /b。 /a 參數(shù)的作用取決于它在命令行字符串中的位置。當(dāng) /a 緊隨 Source 之后時(shí),copy 會將文件當(dāng)作 ASCII(文本)文件,并復(fù)制第一個(gè)文件結(jié)束符前的數(shù)據(jù)。 當(dāng) /a 緊隨 Destination 之后時(shí),copy 會添加文件結(jié)束符作為文件的最后一個(gè)字符。 使用 /b 當(dāng) /b 在命令行上位于文件列表之前時(shí),它適用于所有已列出的文件,直到 copy 遇到 /a。在這種情況下,/a 應(yīng)用于文件前面的 /a。 當(dāng) /b 在命令行上位于文件列表之后時(shí),它適用于所有已列出的文件,直到 copy 遇到 /a。在這種情況下,/a 應(yīng)用于文件前面的 /a。 /b 的作用取決于它在命令行字符串中的位置。當(dāng) /b 緊隨 Source 之后時(shí),copy 復(fù)制包含任何文件結(jié)束符的整個(gè)文件。 當(dāng) /b 緊隨 Destination 之后時(shí),copy 不會添加文件結(jié)束符。 使用 /v 使用 /y 和 /-y 附屬文件 使用 /z 復(fù)制到設(shè)備以及從設(shè)備復(fù)制 在復(fù)制到設(shè)備時(shí)使用或省略 /b 使用默認(rèn)目標(biāo)文件 File cannot be copied onto itself 0 File(s) copied 合并文件 復(fù)制零長度文件 更改文件的時(shí)間和日期 copy /b Source+,, 逗號表明省略了 Destination 參數(shù)。 在子目錄中復(fù)制文件 故障恢復(fù)控制臺提供了帶有不同參數(shù)的 copy 命令。 copy memo.doc letter.doc /a 要將文件 Robin.typ 從當(dāng)前驅(qū)動器的當(dāng)前目錄復(fù)制到位于驅(qū)動器 C 上的現(xiàn)有目錄 Birds 中,請鍵入: copy robin.typ c:\birds 如果 Birds 目錄不存在,Robin.typ 文件將被復(fù)制到驅(qū)動器 C 的磁盤根目錄下名為 Birds 的文件中。 要將幾個(gè)文件復(fù)制進(jìn)一個(gè)文件,則需列出幾個(gè) Source 文件,并且文件名之間用加號 (+) 隔開,同時(shí)指定要包含合并結(jié)果文件的 Destination 文件。例如,要將位于當(dāng)前驅(qū)動器的當(dāng)前目錄中的 Mar89.rpt、Apr89.rpt 以及 May89.rpt 合并,并將它們放在當(dāng)前驅(qū)動器的當(dāng)前目錄下名為 Report 的文件中,請鍵入: copy mar89.rpt + apr89.rpt + may89.rpt report 合并文件時(shí),copy 會使用當(dāng)前日期和時(shí)間來標(biāo)記目標(biāo)文件。如果省略 Destination,則文件被合并并且會使用首個(gè)指定的文件的名稱存儲。例如,要將所有的四個(gè)文件合并進(jìn) Report,而且已有名為 Report 的文件,請鍵入: copy report + mar89.rpt + apr89.rpt + may89.rpt 還可通過使用通配符(* 或 ?)來將幾個(gè)文件合并進(jìn)一個(gè)文件。例如,在當(dāng)前驅(qū)動器的當(dāng)前目錄中,要將所有具有 .exe 擴(kuò)展名的文件合并進(jìn)名為 Combin.doc 的文件中,請鍵入: copy *.txt combin.doc 如果要使用通配符將幾個(gè)二進(jìn)制文件合并進(jìn)一個(gè)文件,請?zhí)砑?/b 命令行選項(xiàng)。這可防止 Windows XP 將 CTRL+Z 當(dāng)作文件結(jié)束符處理。例如,鍵入: copy /b *.exe combin.exe 如果合并二進(jìn)制文件,結(jié)果文件可能因?yàn)閮?nèi)部格式而無法使用。 copy *.txt + *.ref *.doc 要合并所有具有 .txt 擴(kuò)展名的文件,然后合并所有具有 .ref 擴(kuò)展名的文件,并將合并結(jié)果置于 Combin.doc 文件中,請鍵入: copy *.txt + *.ref combin.doc |
所以,例如:
copy C:\TDDOWNLOAD\1.txt D:\TDDOWNLOAD
復(fù)制文件夾C:\TDDOWNLOAD中的1.txt到文件夾D:\TDDOWNLOAD里
copy C:\WINDOWS\2.txt
復(fù)制文件夾C:\WINDOWS中的2.txt到本批處理文件同一文件夾下
6,“rem”是做什么的呢?
在上一個(gè)范例中,我們看到了另外一個(gè)新的命令rem。那么,rem是做什么的呢?
Rem
使您可以在批處理文件或配置文件中加入注釋。
rem 命令不在屏幕上顯示注釋。必須在批處理或 Config.nt 文件中使用 echo on 命令才能在屏幕上顯示注釋。
在批處理文件注釋中不能使用重定向字符“(”或“)”或管道 (|)。
盡管您可以使用沒有注釋的 rem 為批處理文件增加垂直間距,但也可以使用空行來增加間距。在處理批處理程序時(shí)會忽略空行。
rem 復(fù)制文件夾C:\TDDOWNLOAD中的1.txt到文件夾D:\TDDOWNLOAD里 pause copy C:\WINDOWS\2.txt :: 復(fù)制文件夾C:\WINDOWS中的2.txt到本批處理文件同一文件夾下 pause |
通過實(shí)際操作的對比,我們會理解:
①,rem后的內(nèi)容不會被在執(zhí)行過程顯示,而echo后的則會。
②,rem是用來增加批處理文件文本中的垂直間隔,而echo.是增加批處理文件執(zhí)行過程中顯示時(shí)的垂直間隔的。
③,rem最大也是最主要的作用就是方便編輯批處理文件時(shí),自己或別人通過rem后的內(nèi)容來理解命令或程序的作用的。
④,小技巧:用::代替rem。
7,關(guān)于批處理文件中所使用命令的學(xué)習(xí)方法。
本章節(jié)中介紹了,一些命令,再以后的章節(jié)中會介紹更多的命令。那么大家如何自己學(xué)寫這些命令呢?實(shí)際上,windows系統(tǒng)為我們提供很好的平臺。
第一種方法:依次打開“開始菜單”—“幫助和支持”,在幫助和支持中心,我們可以在里面搜索很多關(guān)于計(jì)算機(jī)的知識,也包括批處理文件所使用的命令,如下圖:
第二種方法:依次打開“開始菜單”—“運(yùn)行”,在運(yùn)行里輸入CMD。例如,我們想知道cls命令是做什么的,只需要輸入cls /?,然后回車就可以了,顯示“清除屏幕”,一個(gè)很簡單又實(shí)用的命令。再比如,我們想知道copy的詳細(xì)語法規(guī)則和說明,只需要再輸入copy /?,然后回車,就一切ok了。如下圖:
8,“cls”是做什么的呢?
在上一示例中,我們在CMD窗口中可以進(jìn)行各種命令的輸入,但如果在不需要的時(shí)候想清理掉這些內(nèi)容呢?其實(shí)很簡單,輸入cls,然后回車ok了!這一命令也可以在批處理文件中使用,但最好和pause等命令配合使用,否則執(zhí)行起來的效果不怎么好……
cls
清除命令提示符窗口。
cls
要清除顯示在命令提示符窗口中的所有信息,并返回空窗口,請鍵入:
cls