华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
  當(dāng)前位置:操作系統(tǒng) > DOS > 文章內(nèi)容
  

DOS批處理高級教程:批處理基礎(chǔ)

 [ 2017年8月25日 ] 【

  第一節(jié) 常用批處理內(nèi)部命令簡介

  批處理定義:顧名思義,批處理文件是將一系列命令按一定的順序集合為一個可執(zhí)行的文本文件,其擴展名為BAT或者CMD。這些命令統(tǒng)稱批處理命令。

  小知識:可以在鍵盤上按下Ctrl+C組合鍵來強行終止一個批處理的執(zhí)行過程。

  了解了大概意思后,我們正式開始學(xué)習(xí).先看一個簡單的例子!

  ?

1
2
3
@echo off
echo "歡迎來到非常BAT!"
pause

  把上面的3條命令保存為文件test.bat或者test.cmd然后執(zhí)行,他就會在屏幕上顯示以下二行話:

  復(fù)制代碼 代碼如下:

  歡迎來到非常BAT!

  請按任意鍵繼續(xù). . .

  這就是一個簡單批處理文件了,這個批處理文件一共就用了2條命令 "echo" 和"pause" 還有一個特殊符號"@"

  從上面這個簡單的批處理中,我們可以發(fā)現(xiàn)其實批處理就是運用一些含有特殊意義的符號和一些完成指定功能的命令組合而成,那么在批處理中有多少這樣的特殊符號和功能命令呢?我們現(xiàn)在就來仔細(xì)了解一下一些最常用的!

  批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息)

  1、REM 和 ::

  2、ECHO 和 @

  3、PAUSE

  4、ERRORLEVEL

  5、TITLE

  6、COLOR

  7、mode 配置系統(tǒng)設(shè)備

  8、GOTO 和 :

  9、FIND

  10、START

  11、assoc 和 ftype

  12、pushd 和 popd

  13、CALL

  14、shift

  15、IF

  16、setlocal 與 變量延遲

  17、ATTRIB 顯示或更改文件屬性

  介紹命令

  1、REM 和 ::

  REM為注釋命令,一般用來給程序加上注解,該命令后的內(nèi)容不被執(zhí)行,但能回顯。

  其次, :: 也可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:

  第一, 任何以冒號:開頭的字符行, 在批處理中都被視作標(biāo)號, 而直接忽略其后的所有內(nèi)容。

  有效標(biāo)號:冒號后緊跟一個以字母數(shù)字開頭的字符串,goto語句可以識別。

  無效標(biāo)號:冒號后緊跟一個非字母數(shù)字的一個特殊符號,goto無法識別的標(biāo)號,可以起到注釋作用,所以 :: 常被用作注釋符號,其實 :+ 也可起注釋作用。

  第二, 與rem 不同的是, ::后的字符行在執(zhí)行時不會回顯, 無論是否用echo on打開命令行回顯狀態(tài), 因為命令解釋器不認(rèn)為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用于 config.sys 文件中。

  行內(nèi)注釋格式:%注釋內(nèi)容% (不常用,慎用)

  2、ECHO 和 @

  @字符放在命令前將關(guān)閉該命令回顯,無論此時echo是否為打開狀態(tài)。

  echo命令的作用列舉如下:

  (1)打開回顯或關(guān)閉回顯功能

  格式:echo [{ on|off }]

  如果想關(guān)閉“ECHO OFF”命令行自身的顯示,則需要在該命令行前加上“@”。

  (2)顯示當(dāng)前ECHO設(shè)置狀態(tài)

  格式:echo

  (3)輸出提示信息

  格式:ECHO 信息內(nèi)容

  上述是ECHO命令常見的三種用法,也是大家熟悉和會用的,但作為DOS命令淘金者你還應(yīng)該知道下面的技巧:

  (4)關(guān)閉DOS命令提示符

  在DOS提示符狀態(tài)下鍵入ECHO OFF,能夠關(guān)閉DOS提示符的顯示使屏幕只留下光標(biāo),直至鍵入ECHO ON,提示符才會重新出現(xiàn)。

  (5)輸出空行,即相當(dāng)于輸入一個回車

  格式:ECHO.

  值得注意的是命令行中的“.”要緊跟在ECHO后面中間不能有空格,否則“.”將被當(dāng)作提示信息輸出到屏幕。另外“.”可以用,:;”/[\]+等任一符號替代。

  命令ECHO.輸出的回車,經(jīng)DOS管道轉(zhuǎn)向可以作為其它命令的輸入,比如echo.|time即相當(dāng)于在TIME命令執(zhí)行后給出一個回車。所以執(zhí)行時系統(tǒng)會在顯示當(dāng)前時間后,自動返回到DOS提示符狀態(tài)

  (6)答復(fù)命令中的提問

  格式:ECHO 答復(fù)語|命令文件名

  上述格式可以用于簡化一些需要人機對話的命令(如:CHKDSK/F;FORMAT Drive:;del *.*)的操作,它是通過DOS管道命令把ECHO命令輸出的預(yù)置答復(fù)語作為人機對話命令的輸入。下面的例子就相當(dāng)于在調(diào)用的命令出現(xiàn)人機對話時輸入“Y”回車:

  C:>ECHO Y|CHKDSK/F

  C:>ECHO Y|DEL A :*.*

  (7)建立新文件或增加文件內(nèi)容

  格式:

  ECHO 文件內(nèi)容>文件名

  ECHO 文件內(nèi)容>>文件名

  例如:

  C:>ECHO @ECHO OFF>AUTOEXEC.BAT建立自動批處理文件

  C:>ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT向自動批處理文件中追加內(nèi)容

  C:>TYPE AUTOEXEC.BAT顯示該自動批處理文件

  @ECHO OFF

  C:\CPAV\BOOTSAFE

  (8)向打印機輸出打印內(nèi)容或打印控制碼

  格式:

  ECHO 打印機控制碼>PRN

  ECHO 打印內(nèi)容>PRN

  下面的例子是向M-1724打印機輸入打印控制碼。156是按住Alt鍵在小鍵盤鍵入156,類似情況依此類推:

  C:>ECHO +156+42+116>PRN(輸入下劃線命令FS*t)

  C:>ECHO +155@>PRN(輸入初始化命令ESC@)

  C:>ECHO.>PRN(換行)

  (9)使喇叭鳴響

  C:>ECHO ^G

  “^G”是在dos窗口中用Ctrl+G或Alt+007輸入,輸入多個^G可以產(chǎn)生多聲鳴響。使用方法是直接將其加入批處理文件中或做成批處理文件調(diào)用。

  這里的“^G”屬于特殊符號的使用,請看本文后面的章節(jié)

  3、PAUSE

  PAUSE,玩游戲的人都知道,暫停的意思

  在這里就是停止系統(tǒng)命令的執(zhí)行并顯示下面的內(nèi)容。

  例:

  PAUSE

  運行顯示:

  請按任意鍵繼續(xù). . .

  要顯示其他提示語,可以這樣用:

  Echo 其他提示語 & pause > nul

  4、errorlevel

  程序返回碼

  echo %errorlevel%

  每個命令運行結(jié)束,可以用這個命令行格式查看返回碼

  用于判斷剛才的命令是否執(zhí)行成功

  默認(rèn)值為0,一般命令執(zhí)行出錯會設(shè) errorlevel 為1

  5、title

  設(shè)置cmd窗口的標(biāo)題

  title 新標(biāo)題 #可以看到cmd窗口的標(biāo)題欄變了

  6、COLOR

  設(shè)置默認(rèn)的控制臺前景和背景顏色。

  COLOR [attr]

  attr 指定控制臺輸出的顏色屬性

  顏色屬性由兩個十六進(jìn)制數(shù)字指定 -- 第一個為背景,第二個則為

  前景。每個數(shù)字可以為以下任何值之一:

  0 = 黑色 8 = 灰色

  1 = 藍(lán)色 9 = 淡藍(lán)色

  2 = 綠色 A = 淡綠色

  3 = 湖藍(lán)色 B = 淡淺綠色

  4 = 紅色 C = 淡紅色

  5 = 紫色 D = 淡紫色

  6 = 黃色 E = 淡黃色

  7 = 白色 F = 亮白色

  如果沒有給定任何參數(shù),該命令會將顏色還原到 CMD.EXE 啟動時的顏色。這個值來自當(dāng)前控制臺窗口、/T 開關(guān)或DefaultColor 注冊表值。

  如果用相同的前景和背景顏色來執(zhí)行 COLOR 命令,COLOR 命令會將 ERRORLEVEL 設(shè)置為 1。

  例如: "COLOR fc" 在亮白色上產(chǎn)生亮紅色

  7、mode 配置系統(tǒng)設(shè)備

  配置系統(tǒng)設(shè)備。

  串行口:    MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]

  [to=on|off] [xon=on|off] [odsr=on|off]

  [octs=on|off] [dtr=on|off|hs]

  [rts=on|off|hs|tg] [idsr=on|off]

  設(shè)備狀態(tài): MODE [device] [/STATUS]

  打印重定向:   MODE LPTn[:]=COMm[:]

  選定代碼頁:   MODE CON[:] CP SELECT=yyy

  代碼頁狀態(tài):   MODE CON[:] CP [/STATUS]

  顯示模式:   MODE CON[:] [COLS=c] [LINES=n]

  擊鍵率:  MODE CON[:] [RATE=r DELAY=d]

  例:

  mode con cols=113 lines=15 & color 9f

  此命令設(shè)置DOS窗口大。15行,113列

  8、GOTO 和 :

  GOTO會點編程的朋友就會知道這是跳轉(zhuǎn)的意思。

  在批處理中允許以“:XXX”來構(gòu)建一個標(biāo)號,然后用GOTO XXX跳轉(zhuǎn)到標(biāo)號:XXX處,然后執(zhí)行標(biāo)號后的命令。

  例:

  ?

1
2
if {%1}=={} goto noparms
if "%2"=="" goto noparms

  標(biāo)簽的名字可以隨便起,但是最好是有意義的字符串啦,前加個冒號用來表示這個字符串是標(biāo)簽,goto命令就是根據(jù)這個冒號(:)來尋找下一步跳到到那里。最好有一些說明這樣你別人看起來才會理解你的意圖啊。

  例:

  ?

1
2
3
4
5
6
@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start
pause

  運行顯示:

  1

  2

  3

  4

  9、find

  在文件中搜索字符串。

  FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V 顯示所有未包含指定字符串的行。

  /C 僅顯示包含字符串的行數(shù)。

  /N 顯示行號。

  /I 搜索字符串時忽略大小寫。

  /OFF[LINE] 不要跳過具有脫機屬性集的文件。

  "string" 指定要搜索的文字串,

  [drive:][path]filename

  指定要搜索的文件。

  如果沒有指定路徑,F(xiàn)IND 將搜索鍵入的或者由另一命令產(chǎn)生的文字。

  Find常和type命令結(jié)合使用

  Type [drive:][path]filename | find "string" [>tmpfile] #挑選包含string的行

  Type [drive:][path]filename | find /v "string" #剔除文件中包含string的行

  Type [drive:][path]filename | find /c #顯示文件行數(shù)

  以上用法將去除find命令自帶的提示語(文件名提示)

  例:

  ?

1
2
3
4
5
6
@echo off
echo 111 >test.txt
echo 222 >>test.txt
find "111" test.txt
del test.txt
pause

  運行顯示如下:

  ---------- TEST.TXT

  111

  請按任意鍵繼續(xù). . .

  例:

  ?

1
2
3
4
5
6
@echo off
echo 111 >test.txt
echo 222 >>test.txt
type test.txt|find "111"
del test.txt
pause

  運行顯示如下:

  111

  請按任意鍵繼續(xù). . .

  10、start 命令

  批處理中調(diào)用外部程序的命令(該外部程序在新窗口中運行,批處理程序繼續(xù)往下執(zhí)行,不理會外部程序的運行狀況),如果直接運行外部程序則必須等外部程序完成后才繼續(xù)執(zhí)行剩下的指令

  例:start explorer d:\

  調(diào)用圖形界面打開D盤

  11、assoc 和 ftype

  文件關(guān)聯(lián)

  assoc 設(shè)置'文件擴展名'關(guān)聯(lián),關(guān)聯(lián)到'文件類型'

  ftype 設(shè)置'文件類型'關(guān)聯(lián),關(guān)聯(lián)到'執(zhí)行程序和參數(shù)'

  當(dāng)你雙擊一個.txt文件時,windows并不是根據(jù).txt直接判斷用 notepad.exe 打開

  而是先判斷.txt屬于 txtfile '文件類型'

  再調(diào)用 txtfile 關(guān)聯(lián)的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1

  可以在"文件夾選項"→"文件類型"里修改這2種關(guān)聯(lián)

  assoc #顯示所有'文件擴展名'關(guān)聯(lián)

  assoc .txt #顯示.txt代表的'文件類型',結(jié)果顯示 .txt=txtfile

  assoc .doc #顯示.doc代表的'文件類型',結(jié)果顯示 .doc=Word.Document.8

  assoc .exe #顯示.exe代表的'文件類型',結(jié)果顯示 .exe=exefile

  ftype #顯示所有'文件類型'關(guān)聯(lián)

  ftype exefile #顯示exefile類型關(guān)聯(lián)的命令行,結(jié)果顯示 exefile="%1" %*

  assoc .txt=Word.Document.8

  設(shè)置.txt為word類型的文檔,可以看到.txt文件的圖標(biāo)都變了

  assoc .txt=txtfile

  恢復(fù).txt的正確關(guān)聯(lián)

  ftype exefile="%1" %*

  恢復(fù) exefile 的正確關(guān)聯(lián)

  如果該關(guān)聯(lián)已經(jīng)被破壞,可以運行 command.com ,再輸入這條命令

  12、pushd 和 popd

  切換當(dāng)前目錄

  @echo off

  c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夾

  md d:\mp4 #在 D:\ 建立 mp4 文件夾

  cd /d d:\mp4 #更改當(dāng)前目錄為 d:\mp4

  pushd c:\mp3 #保存當(dāng)前目錄,并切換當(dāng)前目錄為 c:\mp3

  popd #恢復(fù)當(dāng)前目錄為剛才保存的 d:\mp4

  一般用處不大,在當(dāng)前目錄名不確定時,會有點幫助。(dos編程中很有用)

  13、CALL

  CALL命令可以在批處理執(zhí)行過程中調(diào)用另一個批處理,當(dāng)另一個批處理執(zhí)行完后,再繼續(xù)執(zhí)行原來的批處理

  CALL command

  調(diào)用一條批處理命令,和直接執(zhí)行命令效果一樣,特殊情況下很有用,比如變量的多級嵌套,見教程后面。在批處理編程中,可以根據(jù)一定條件生成命令字符串,用call可以執(zhí)行該字符串,見例子。

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

  調(diào)用的其它批處理程序。filename 參數(shù)必須具有 .bat 或 .cmd 擴展名。

  CALL :label arguments

  調(diào)用本文件內(nèi)命令段,相當(dāng)于子程序。被調(diào)用的命令段以標(biāo)簽:label開頭以命令goto :eof結(jié)尾。

  另外,批腳本文本參數(shù)參照(%0、%1、等等)已如下改變:

  批腳本里的 %* 指出所有的參數(shù)(如 %1 %2 %3 %4 %5 ...)

  批參數(shù)(%n)的替代已被增強。您可以使用以下語法:(看不明白的直接運行后面的例子)

  %~1 - 刪除引號("),擴充 %1

  %~f1 - 將 %1 擴充到一個完全合格的路徑名

  %~d1 - 僅將 %1 擴充到一個驅(qū)動器號

  %~p1 - 僅將 %1 擴充到一個路徑

  %~n1 - 僅將 %1 擴充到一個文件名

  %~x1 - 僅將 %1 擴充到一個文件擴展名

  %~s1 - 擴充的路徑指含有短名

  %~a1 - 將 %1 擴充到文件屬性

  %~t1 - 將 %1 擴充到文件的日期/時間

  %~z1 - 將 %1 擴充到文件的大小

  %~$PATH : 1 - 查找列在 PATH 環(huán)境變量的目錄,并將 %1 擴充到找到的第一個完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會擴充到空字符串

  可以組合修定符來取得多重結(jié)果:

  %~dp1 - 只將 %1 擴展到驅(qū)動器號和路徑

  %~nx1 - 只將 %1 擴展到文件名和擴展名

  %~dp$PATH:1 - 在列在 PATH 環(huán)境變量中的目錄里查找 %1,并擴展到找到的第一個文件的驅(qū)動器號和路徑。

  %~ftza1 - 將 %1 擴展到類似 DIR 的輸出行。

  在上面的例子中,%1 和 PATH 可以被其他有效數(shù)值替換。

  %~ 語法被一個有效參數(shù)號碼終止。%~ 修定符不能跟 %*使用

  注意:參數(shù)擴充時不理會參數(shù)所代表的文件是否真實存在,均以當(dāng)前目錄進(jìn)行擴展

  要理解上面的知識,下面的例子很關(guān)鍵。

  例:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
Echo 產(chǎn)生一個臨時文件 > tmp.txt
Rem 下行先保存當(dāng)前目錄,再將c:\windows設(shè)為當(dāng)前目錄
pushd c:\windows
Call :sub tmp.txt
Rem 下行恢復(fù)前次的當(dāng)前目錄
Popd
Call :sub tmp.txt
pause
Del tmp.txt
exit
:sub
Echo 刪除引號: %~1
Echo 擴充到路徑: %~f1
Echo 擴充到一個驅(qū)動器號: %~d1
Echo 擴充到一個路徑: %~p1
Echo 擴充到一個文件名: %~n1
Echo 擴充到一個文件擴展名: %~x1
Echo 擴充的路徑指含有短名: %~s1
Echo 擴充到文件屬性: %~a1
Echo 擴充到文件的日期/時間: %~t1
Echo 擴充到文件的大。 %~z1
Echo 擴展到驅(qū)動器號和路徑:%~dp1
Echo 擴展到文件名和擴展名:%~nx1
Echo 擴展到類似 DIR 的輸出行:%~ftza1
Echo.
Goto :eof

  復(fù)制代碼 代碼如下:

  set aa=123456

  set cmdstr=echo ª%

  call %cmdstr%

  pause

  本例中如果不用call,而直接運行%cmdstr%,將顯示結(jié)果ª%,而不是123456

  14、shift

  更改批處理文件中可替換參數(shù)的位置。

  SHIFT [/n]

  如果命令擴展名被啟用,SHIFT 命令支持/n 命令行開關(guān);該命令行開關(guān)告訴

  命令從第 n 個參數(shù)開始移位;n 介于零和八之間。例如:

  SHIFT /2

  會將 %3 移位到 %2,將 %4 移位到 %3,等等;并且不影響 %0 和 %1。

  15、IF

  IF 條件判斷語句,語法格式如下:

  IF [NOT] ERRORLEVEL number command

  IF [NOT] string1==string2 command

  IF [NOT] EXIST filename command

  下面逐一介紹,更詳細(xì)的分析請看后面章節(jié)。

  (1) IF [NOT] ERRORLEVEL number command

  IF ERRORLEVEL這個句子必須放在某一個命令的后面,執(zhí)行命令后由IF ERRORLEVEL 來判斷命令的返回值。

  Number的數(shù)字取值范圍0~255,判斷時值的排列順序應(yīng)該由大到小。返回的值大于等于指定的值時,條件成立

  例:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
dir c:
rem退出代碼為>=1就跳至標(biāo)題1處執(zhí)行,>=0就跳至標(biāo)題0處執(zhí)行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
Rem 上面的兩行不可交換位置,否則失敗了也顯示成功。
:0
echo 命令執(zhí)行成功!
Rem 程序執(zhí)行完畢跳至標(biāo)題exit處退出
goto exit
:1
echo 命令執(zhí)行失!
Rem 程序執(zhí)行完畢跳至標(biāo)題exit處退出
goto exit
:exit
pause

  運行顯示:命令執(zhí)行成功!

  (2) IF [NOT] string1==string2 command

  string1和string2都為字符的數(shù)據(jù),英文內(nèi)字符的大小寫將看作不同,這個條件中的等于號必須是兩個(絕對相等的意思)

  條件相等后即執(zhí)行后面的command

  檢測當(dāng)前變量的值做出判斷,為了防止字符串中含有空格,可用以下格式

  if [NOT] {string1}=={string2} command

  if [NOT] [string1]==[string2] command

  if [NOT] "string1"=="string2" command

  這種寫法實際上將括號或引號當(dāng)成字符串的一部分了,只要等號左右兩邊一致就行了,比如下面的寫法就不行:

  if {string1}==[string2] command

  (3) IF [NOT] EXIST filename command

  EXIST filename為文件或目錄存在的意思

  ?

1
2
3
echo off
IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo 文件不存在!

  這個批處理大家可以放在C盤和D盤分別執(zhí)行,看看效果

  16、setlocal 與 變量延遲

  本條內(nèi)容引用[英雄出品]的批處理教程:

  要想進(jìn)階,變量延遲是必過的一關(guān)!所以這一部分希望你能認(rèn)真看。

  為了更好的說明問題,我們先引入一個例子。

  例1:

  ?

1
2
3
4
@echo off
set a=4
set a=5 & echo %a%
pause

  結(jié)果:4

  解說:為什么是4而不是5呢?在echo之前明明已經(jīng)把變量a的值改成5了?

  讓我們先了解一下批處理運行命令的機制:

  批處理讀取命令時是按行讀取的(另外例如for命令等,其后用一對圓括號閉合的所有語句也當(dāng)作一行),在處理之前要完成必要的預(yù)處理工作,這其中就包括對 該行命令中的變量賦值。我們現(xiàn)在分析一下例1,批處理在運行到這句“set a=5 & echo %a%”之前,先把這一句整句讀取并做了預(yù)處理——對變量a賦了值,那么%a%當(dāng)然就是4了!(沒有為什么,批處理就是這樣做的。)

  而為了能夠感知環(huán)境變量的動態(tài)變化,批處理設(shè)計了變量延遲。簡單來說,在讀取了一條完整的語句之后,不立即對該行的變量賦值,而會在某個單條語句執(zhí)行之前再進(jìn)行賦值,也就是說“延遲”了對變量的賦值。

  那么如何開啟變量延遲呢?變量延遲又需要注意什么呢?舉個例子說明一下:

  例2:

  ?

1
2
3
4
5
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause

  結(jié)果:5

  解說:啟動了變量延遲,得到了正確答案。變量延遲的啟動語句是“setlocal enabledelayedexpansion”,并且變量要用一對嘆號“!!”括起來(注意要用英文的嘆號),否則就沒有變量延遲的效果。

  分析一下例2,首先“setlocal enabledelayedexpansion”開啟變量延遲,然后“set a=4”先給變量a賦值為4,“set a=5 & echo !a!”這句是給變量a賦值為5并輸出(由于啟動了變量延遲,所以批處理能夠感知到動態(tài)變化,即不是先給該行變量賦值,而是在運行過程中給變量賦值,因此 此時a的值就是5了)。

  再舉一個例子鞏固一下。

  例3:

  ?

1
2
3
4
5
6
7
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause

  結(jié)果:

  1

  2

  3

  4

  5

  解說:本例開啟了變量延遲并用“!!”將變量擴起來,因此得到我們預(yù)期的結(jié)果。如果不用變量延遲會出現(xiàn)什

  么結(jié)果呢?結(jié)果是這樣的:

  ECHO 處于關(guān)閉狀態(tài)。

  ECHO 處于關(guān)閉狀態(tài)。

  ECHO 處于關(guān)閉狀態(tài)。

  ECHO 處于關(guān)閉狀態(tài)。

  ECHO 處于關(guān)閉狀態(tài)。

  即沒有感知到for語句中的動態(tài)變化。

  提示:在沒有開啟變量延遲的情況下,某條命令行中的變量改變,必須到下一條命令才能體現(xiàn)。這一點也可以加以利用,看例子。

  例:交換兩個變量的值,且不用中間變量

  ?

1
2
3
4
5
6
7
8
9
10
@echo off
::目的:交換兩個變量的值,但是不使用臨時變量
::Code by JM 2007-1-24 CMD@XP
::出處://www.cn-dos.net/forum/viewthread.php?tid=27078
set var1=abc
set var2=123
echo 交換前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交換后: var1=%var1% var2=%var2%
pause

  17、ATTRIB 顯示或更改文件屬性

  ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]

  + 設(shè)置屬性。

  - 清除屬性。

  R 只讀文件屬性。

  A 存檔文件屬性。

  S 系統(tǒng)文件屬性。

  H 隱藏文件屬性。

  [drive:][path][filename]

  指定要處理的文件屬性。

  /S 處理當(dāng)前文件夾及其子文件夾中的匹配文件。

  /D 也處理文件夾。

  例:

  md autorun

  attrib +a +s +h autorun

  上面的命令將建立文件夾autorun,然后將其設(shè)為存檔、系統(tǒng)、隱藏屬性

  第二節(jié) 常用特殊符號

  1、@ 命令行回顯屏蔽符

  2、% 批處理變量引導(dǎo)符

  3、> 重定向符

  4、>> 重定向符

  5、<、>&、<& 重定向符

  6、| 命令管道符

  7、^ 轉(zhuǎn)義字符

  8、& 組合命令

  9、&& 組合命令

  10、|| 組合命令

  11、"" 字符串界定符

  12、, 逗號

  13、; 分號

  14、() 括號

  15、! 感嘆號

  16、批處理中可能會見到的其它特殊標(biāo)記符: (略)

  CR(0D) 命令行結(jié)束符

  Escape(1B) ANSI轉(zhuǎn)義字符引導(dǎo)符

  Space(20) 常用的參數(shù)界定符

  Tab(09) ; = 不常用的參數(shù)界定符

  + COPY命令文件連接符

  * ? 文件通配符

  / 參數(shù)開關(guān)引導(dǎo)符

  : 批處理標(biāo)簽引導(dǎo)符

  廢話少說,開講了

  1、@ 命令行回顯屏蔽符

  這個字符在批處理中的意思是關(guān)閉當(dāng)前行的回顯。我們從前幾課知道

  ECHO OFF可以關(guān)閉掉整個批處理命令的回顯,但不能關(guān)掉ECHO OFF這個命令,現(xiàn)在我們在ECHO OFF這個命令前加個@,就可以達(dá)到所有命令均不回顯的要求

  2、% 批處理變量引導(dǎo)符

  這個百分號嚴(yán)格來說是算不上命令的,它只是批處理中的參數(shù)而已(多個%一起使用的情況除外,以后還將詳細(xì)介紹)。

  引用變量用%var%,調(diào)用程序外部參數(shù)用%1至%9等等

  %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*為命令行傳遞給批處理的參數(shù)

  %0 批處理文件本身,包括完整的路徑和擴展名

  %1 第一個參數(shù)

  %9 第九個參數(shù)

  %* 從第一個參數(shù)開始的所有參數(shù)

  參數(shù)%0具有特殊的功能,可以調(diào)用批處理自身,以達(dá)到批處理本身循環(huán)的目的,也可以復(fù)制文件自身等等。

  例:最簡單的復(fù)制文件自身的方法

  copy %0 d:\wind.bat

  小技巧:添加行內(nèi)注釋

  %注釋內(nèi)容%(可以用作行內(nèi)注釋,不能出現(xiàn)重定向符號和管道符號)

  為什么這樣呢?此時“注釋內(nèi)容”其實被當(dāng)作變量,其值是空的,故只起注釋作用,不過這種用法容易出現(xiàn)語法錯誤,一般不用。

  3、> 重定向符

  輸出重定向命令

  這個字符的意思是傳遞并且覆蓋,他所起的作用是將運行的結(jié)果傳遞到后面的范圍(后邊可以是文件,也可以是默認(rèn)的系統(tǒng)控制臺)

  在NT系列命令行中,重定向的作用范圍由整個命令行轉(zhuǎn)變?yōu)閱蝹命令語句,受到了命令分隔符&,&&,||和語句塊的制約限制。

  比如:

  使用命令:echo hello >1.txt將建立文件1.txt,內(nèi)容為”hello “(注意行尾有一空格)

  使用命令:echo hello>1.txt將建立文件1.txt,內(nèi)容為”hello“(注意行尾沒有空格)

  4、>> 重定向符

  輸出重定向命令

  這個符號的作用和>有點類似,但他們的區(qū)別是>>是傳遞并在文件的末尾追加,而>是覆蓋

  用法同上

  同樣拿1.txt做例子

  使用命令:

  ?

1
2
echo hello > 1.txt
echo world >>1.txt

  這時候1.txt 內(nèi)容如下:

  hello

  world

  5、<、>&、<& 重定向符

  這三個命令也是管道命令,但它們一般不常用,你只需要知道一下就ok了,當(dāng)然如果想仔細(xì)研究的話,可以自己查一下資料。(本人已查過,網(wǎng)上也查不到相關(guān)資料)

  <,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。

  ?

1
2
3
4
@echo off
echo 2005-05-01>temp.txt
date
del temp.txt

  這樣就可以不等待輸入直接修改當(dāng)前日期

  >&,將一個句柄的輸出寫入到另一個句柄的輸入中。

  <&,剛好和>&相反,從一個句柄讀取輸入并將其寫入到另一個句柄輸出中。

  常用句柄:0、1、2,未定義句柄:3—9

  1>nul 表示禁止輸出正確的信息

  2>nul 表示禁止輸出錯誤信息。

  其中的1與2都是代表某個數(shù)據(jù)流輸入輸出的地址(NT CMD 稱之為句柄,MSDOS稱之為設(shè)備)。

  句柄0:標(biāo)準(zhǔn)輸入stdin,鍵盤輸入

  句柄1:標(biāo)準(zhǔn)輸出stdout,輸出到命令提示符窗口(console,代碼為CON)

  句柄2:標(biāo)準(zhǔn)錯誤stderr,輸出到命令提示符窗口(console,代碼為CON)

  其中的stdin可被<重定向,stdout可被>、>>重定向。

  我們已經(jīng)知道讀取文本中的內(nèi)容可以用for命令,但如果只需要讀取第一行用for命令就有點麻煩。簡單的辦法如下:

  ?

1
2
3
4
@echo off
set /p str=<%0
echo %str%
pause
本文糾錯】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
永清县| 东乌珠穆沁旗| 灌云县| 惠东县| 南岸区| 门头沟区| 秀山| 肃南| 金门县| 大田县| 嘉义市| 宁明县| 义马市| 台北市| 淅川县| 陆川县| 玉溪市| 临夏市| 汝南县| 黑水县| 宜兰县| 疏附县| 安图县| 岳阳县| 饶河县| 磐安县| 清水河县| 苏尼特右旗| 商河县| 洪泽县| 静宁县| 鹤庆县| 贡觉县| 青州市| 宣化县| 康定县| 龙游县| 文山县| 棋牌| 肃宁县| 青岛市|