1、@ 命令行回顯屏蔽符
這個字符在批處理中的意思是關閉當前行的回顯。我們從前幾課知道
ECHO OFF 可以關閉掉整個批處理命令的回顯,但不能關掉 ECHO OFF 這個命令,現在我們在 ECHO OFF
這個命令前加個@,就可以達到所有命令均不回顯的要求
2、% 批處理變量引導符
這個百分號嚴格來說是算不上命令的,它只是批處理中的參數而已(多個%一起使用的情況除外,以後還
將詳細介紹)。
引用變量用%var%,調用程序外部參數用%1 至%9 等等
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*爲命令行傳遞給批處理的參數
%0 批處理文件本身,包括完整的路徑和擴展名
%1 第一個參數
%9 第九個參數
%* 從第一個參數開始的所有參數
參數%0 具有特殊的功能,可以調用批處理自身,以達到批處理本身循環的目的,也可以複製文件自身等
等。
例:最簡單的複製文件自身的方法
copy %0 d:\\wind.bat
小技巧:添加行內註釋
%註釋內容%(可以用作行內註釋,不能出現重定向符號和管道符號)
爲什麼這樣呢?此時"註釋內容"其實被當作變量,其值是空的,故只起註釋作用,不過這種用法容易出現
語法錯誤,一般不用。
3、> 重定向符
輸出重定向命令
這個字符的意思是傳遞並且覆蓋,他所起的作用是將運行的結果傳遞到後面的範圍(後邊可以是文件,也
可以是默認的系統控制檯)
在 NT 系列命令行中,重定向的作用範圍由整個命令行轉變爲單個命令語句,受到了命令分隔符&,&&,||
和語句塊的制約限制。
比如:
使用命令:echo hello >1.txt 將建立文件 1.txt,內容爲"hello "(注意行尾有一空格)
使用命令:echo hello>1.txt 將建立文件 1.txt,內容爲"hello"(注意行尾沒有空格)
4、>> 重定向符
輸出重定向命令
這個符號的作用和>有點類似,但他們的區別是>>是傳遞並在文件的末尾追加,而>是覆蓋
用法同上
同樣拿 1.txt 做例子
使用命令:
echo hello > 1.txt
echo world >>1.txt
這時候 1.txt 內容如下:
hello
world
5、<、>&、<& 重定向符
這三個命令也是管道命令,但它們一般不常用,你只需要知道一下就 ok 了,當然如果想仔細研究的話,可
以自己查一下資料。(本人已查過,網上也查不到相關資料)
<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
這樣就可以不等待輸入直接修改當前日期
>&,將一個句柄的輸出寫入到另一個句柄的輸入中。
<&,剛好和>&相反,從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
常用句柄:0、1、2,未定義句柄:3—9
1>nul 表示禁止輸出正確的信息
2>nul 表示禁止輸出錯誤信息。
其中的 1 與 2 都是代表某個數據流輸入輸出的地址(NT CMD 稱之爲句柄,MSDOS 稱之爲設備)。
句柄 0:標準輸入 stdin,鍵盤輸入
句柄 1:標準輸出 stdout,輸出到命令提示符窗口(console,代碼爲 CON)
句柄 2:標準錯誤 stderr,輸出到命令提示符窗口(console,代碼爲 CON)
其中的 stdin 可被<重定向,stdout 可被>、>>重定向。
我們已經知道讀取文本中的內容可以用 for 命令,但如果只需要讀取第一行用 for 命令就有點麻煩。簡單的
辦法如下:
@echo off
set /p str=<%0
echo %str%
pause
運行顯示批處理文件自身的第一行:@echo off
6、| 命令管道符
格式:第一條命令 | 第二條命令 [| 第三條命令...]
將第一條命令的結果作爲第二條命令的參數來使用,記得在 unix 中這種方式很常見。
例如:
dir c:\\|find "txt"
以上命令是:查找 C:\\所有,並發現 TXT 字符串。
FIND 的功能請用 FIND /? 自行查看
在不使 format 的自動格式化參數時,我是這樣來自動格式化 A 盤的
echo y|format a: /s /q /v:system
用過 format 的都知道,再格盤時要輸入 y 來確認是否格盤,這個命令前加上 echo y 並用|字符來將 echo y
的結果傳給 format 命令
從而達到自動輸入 y 的目的
(這條命令有危害性,測試時請慎重)
7、^ 轉義字符
^是對特殊符號<,>,&的前導字符,在命令中他將以上 3 個符號的特殊功能去掉,僅僅只把他們當成符號而
不使用他們的特殊意義。
比如
echo test ^>1.txt
結果則是:test > 1.txt
他沒有追加在 1.txt 裏,呵呵。只是顯示了出來
另外,此轉義字符還可以用作續行符號。
舉個簡單的例子:
@echo off
echo 英雄^
是^
好^
男人
pause
不用多說,自己試一下就明白了。
爲什麼轉義字符放在行尾可以起到續行符的作用呢?原因很簡單,因爲每行末尾還有一個看不見的符號,
即回車符,轉義字符位於行尾時就讓回車符失效了,從而起到了續行的作用。
8、& 組合命令
語法:第一條命令 & 第二條命令 [& 第三條命令...]
&、&&、||爲組合命令,顧名思義,就是可以把多個命令組合起來當一個命令來執行。這在批處理腳本里是
允許的,而且用的非常廣泛。因爲批處理認行不認命令數目。
這個符號允許在一行中使用 2 個以上不同的命令,當第一個命令執行失敗了,也不影響後邊的命令執行。
這裏&兩邊的命令是順序執行的,從前往後執行。
比如:
dir z:\\ & dir y:\\ & dir c:\\
以上命令會連續顯示 z,y,c 盤的內容,不理會該盤是否存在
9、&& 組合命令
語法:第一條命令 && 第二條命令 [&& 第三條命令...]
用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則
一直執行完所有命令
這個命令和上邊的類似,但區別是,第一個命令失敗時,後邊的命令也不會執行
dir z:\\ && dir y:\\ && dir c:\\
10、|| 組合命令
語法:第一條命令 || 第二條命令 [|| 第三條命令...]
用這種方法可以同時執行多條命令,當一條命令失敗後才執行第二條命令,當碰到執行正確的命令後將不
執行後面的命令,如果沒有出現正確的命令則一直執行完所有命令;
提示:組合命令和重定向命令一起使用必須注意優先級
管道命令的優先級高於重定向命令,重定向命令的優先級高於組合命令
問題:把 C 盤和 D 盤的文件和文件夾列出到 a.txt 文件中。看例:
dir c:\\ && dir d:\\ > a.txt
這樣執行後 a.txt 裏只有 D 盤的信息!爲什麼?因爲組合命令的優先級沒有重定向命令的優先級高!所以這
句在執行時將本行分成這兩部分:dir c:\\和 dir d:\\ > a.txt,而並不是如你想的這兩部分:dir c:\\ && dir d:\\和
> a.txt。要使用組合命令&&達到題目的要求,必須得這麼寫:
dir c:\\ > a.txt && dir d:\\ >> a.txt
這樣,依據優先級高低,DOS 將把這句話分成以下兩部分:dir c:\\ > a.txt 和 dir d:\\ >> a.txt。例十八中的幾
句的差別比較特殊,值得好好研究體會一下。
當然這裏還可以利用&命令(自己想一下道理哦):
dir c:\\ > a.txt & dir d:\\ >> a.txt
11、"" 字符串界定符
雙引號允許在字符串中包含空格,進入一個特殊目錄可以用如下方法
cd "program files"
cd progra~1
cd pro*
以上三種方法都可以進入 program files 這個目錄
12、, 逗號
逗號相當於空格,在某些情況下","可以用來當做空格使
比如
dir,c:\\
13、; 分號
分號,當命令相同時,可以將不同目標用;來隔離,但執行效果不變,如執行過程中發生錯誤,則只返回
錯誤報告,但程序仍會執行。(有人說不會繼續執行,其實測試一下就知道了)
比如:
dir c:\\;d:\\;e:\\;z:\\
以上命令相當於
dir c:\\
dir d:\\
dir e:\\
dir f:\\
如果其中 z 盤不存在,運行顯示:系統找不到指定的路徑。然後終止命令的執行。
例:dir c:\\;d:\\;e:\\1.txt
以上命令相當於
dir c:\\
dir d:\\
dir e:\\1.txt
其中文件 e:\\1.txt 不存在,但 e 盤存在,有錯誤提示,但命令仍會執行。
爲什麼?如果目標路徑不存在,則終止執行;如果路徑存在,僅文件不存在,則繼續執行。
14、() 括號
小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,這些命令將被
看成一個整體,視爲一條命令行。
括號在 for 語句和 if 語句中常見,用來嵌套使用循環或條件語句,其實括號()也可以單獨使用,請看例
子。
例:
命令:echo 1 & echo 2 & echo 3
可以寫成:
(
echo 1
echo 2
echo 3
)
上面兩種寫法效果一樣,這兩種寫法都被視爲是一條命令行。
注意:這種多條命令被視爲一條命令行時,如果其中有變量,就涉及到變量延遲的問題。
15、! 感嘆號
沒啥說的,在變量延遲問題中,用來表示變量,即%var%應該表示爲!var!,請看前面的 setlocal 命令介紹。
16、批處理中可能會見到的其它特殊標記符: (略)
CR(0D) 命令行結束符
Escape(1B) ANSI 轉義字符引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY 命令文件連接符
* ? 文件通配符
/ 參數開關引導符
: 批處理標籤引導符