編程常用句式
1. 想學習編程但是我不會英語怎麼辦
經常有同學問:我英語不好,編程好像都是英文寫的,我能學編程嗎?
其實這里有一個小常識,英語是世界上最通用的語言,而計算機編程語言又是老外發明的,所以所有的計算機編程語言才都是採用英文編碼。
接著回答開頭的問題:英語不好可以學編程嗎?
其實剛開始學編程是不需要太高深的知識和英語基礎的,所以大家可以放心。如果你英文水平不高,這並不影響你做程序員,編程主要是靠邏輯思維,數學建模。
而且學習編程,常用的單詞就那麼多,只要把常見的單詞學會,你的代碼也能寫得很好。
只是讀文檔的時候可能對英語要求稍微高點,但是你也別忘記還有有道詞典、谷歌翻譯呀。而且在開始階段,壓根不用擔心太多,你學的都是現成的,大不了不懂就查。
比如「if」 「else」 「while」 「for」 「var」 「new」之類。用得多了自然而然地就記住了。
CSS 里英語就更重要了,比如 transition、transform、translate,你在不了解英語含義的情況下,很難把這些記下來。
而且到了後期,你可能還需要讀國外開發者分享的文檔和技術,甚至有不懂的技術,也需要你去國外網站上查,這時候機器翻譯就不大好使了。
所以作為開發者如何學好英語呢?
首先要明白的一點是,常規英語和計算機英語的不同。
常規英語的學習,包含很多方面,有語法,音標,詞彙量等知識面,因此需要背大量的單詞、語法,還要會聽說讀寫,做閱讀、做聽力。
而且在國內,我們從小學開始學英語,十多年了都學不好,想要因為編程短期提升常規英語學習,基本上是不可能的。
然而編程所需要的英語都是十分專業的計算機英語。
簡單的來說,就是通過匯編語言來讓計算機明白所接受的各種指令的英語,對於絕大多數編程軟體來說,它所需要用到的英文片語和詞彙,都是固定的和相對簡單的片語和句式。
相對於常規英語的廣泛程度來說,它更像具有固定格式的專業性更強的英文寫作,往往只要你熟讀熟記後,對於編程是沒有太大的影響。
比如簡單的for next 循環,你可以不知道for和next是什麼意思 ,但是你要知道這是一個循環,還要知道怎麼用。
一言以蔽之,就是英語好的同學編程不一定能學好;編程好的同學,不一定英語很棒。
英語只是編程的輔助工具,而非決定性工具。
所以如何提升編程英語,我這里有兩個小建議:
a) 設備上可以裝翻譯工具,哪裡不會點哪裡。
b) 抓住可以學英語的機會。比如多用英文軟體,少用漢化版。比如用英文操作系統,不用中文版。這樣你每天都在記單詞了。
2. 我想學電腦編程,但我又是一個電腦小白(電腦基礎的用法還是知道的),想請教大家指導下我該怎麼學
我就是學軟體的。主攻的是java和C#,但仍不可否認C語言的重要地位,我們學校任何計算機系以外的系都必須要學C語言,但是就是計算機系軟體專業不學(我也不知道是怎麼一回事兒),當然Java現在已經超越C語言一舉成為最常用編程軟體之首。
在這里我就先以Java為例,給你提一點建議:
1.你可以先買一本Java面向對象的書,從基礎開始,當然也需要輔以網路上的知識來學習,像一些視頻教程什麼的。
2.順序肯定是先基礎開始,《java基礎教程》、《java編程思想》、《head first java》......這些
都可以選擇。
3.注意事項,心理一定要強健啊!真的很枯燥,而且比較復雜,學習不是只要學好基礎就可以了的,必須全部都通。學java還要學 《數據結構》 以及《Java Web整合開發》,等一大套........
4.數學要好一點,以後你數學中會學演算法,恩,你一定要學好!英語...其實我覺得只要你能記住那些編程句式都是用來干什麼的就行。
5.編程的分類?我覺得無所謂分類啊,各種編程語言其實也都算是相通的。而且編程是用來干什麼的,其實各種編程到最後達成的目的都一樣,都是做出項目來!
6.至於哪一類適合哪一類人學習我就不得而知了....呵呵,總之,是要感興趣,有毅力的人的,恩,我認為還要得細心。其實,看著自己寫出的代碼最後做出東西來還是很興奮的,就是 過程很無奈....出錯,調試,尤其是調試,或許你調試用的時間比你寫代碼的時間都長,很痛苦。
你才初中生就開始要自學編程,不得不說你真的很有覺悟,呵呵。其實,編程貌似自學成才的要比學校培養的要多得多。加油啊~
希望可以解決你的問題。
3. 在編程中寫兩個end if 是什麼意思
在編程中寫兩個end if表示程序中存在if語句的嵌套,兩個end if分別是兩個if語句的結束語句。
編程語言中,譬如BASIC中, IF <條件> THEN <語句體> END IF 或者 IF <條件> THEN <語句體1> ELSE <語句體2> END IF的語句型式是固定的句式,即IF語句需要END IF語句來作為結束語句,表示一個條件語句的結束。
而在if語句中又包含一個或多個if語句稱為if語句的嵌套,為了保證if語句的完整性與正確性,就必須為每條if語句配置end if語句來結束該條件語句,所以也就會出現前後兩個end if語句的情況。
(3)編程常用句式擴展閱讀:
相關的規則:
#If...Then...#Else指令的作用與If...Then...Else語句相同,其差異在於#If、#Else、#ElseIf,及#End If指令沒有單獨成行的形式,也就是說,在指令所在的那一行,不能有其他代碼出現。
條件編譯通常用來編譯不同平台上的同一個程序。也可以用來避免調試程序代碼出現在可執行程序中。條件編譯時被排除的程序代碼在最後的可執行文件中被完全略去,所以不會對程序的大小或功能有任何影響。
4. 學編程先學C語言好還是易語言好
無所謂好壞,二者對比如下:
1 C語言更難學一些。C語言與底層相關,專業性更強,同時C語言為國外發展起來的,大多數文檔均為英文版,甚至部分沒有中文翻譯。而易語言是中文本土語言,使用操作更符合中國人習慣,上手容易。
2 應用范圍不同。C語言更多應用於底層相關,應用廣泛,包括各種領域。而易語言目前只應用於計算機平台。
3 C語言從創建,發展到現在已經很成熟了,全世界有無數人在使用,維護。而易語言只有中國人使用,歷史要短很多,所以易語言沒有C語言成熟完善。
5. 學習編程必須英語好嗎英語很差勁
編程語言給人的感覺就是一個個英文字元,所以很多人在學編程前,總擔心自己英語不好會導致學不好編程,更有人因此打了退堂鼓。是否英語不好就一定學不好編程呢?在這里就給大家好好梳理一下英語和編程兩者的關系。
其實編程能用到的英文沒有浩如煙海,大家常用的命令不算多。在JAVA等編程語言中,經常會用到的英文單詞只有幾百個,主要包括以下兩種:
1、輸出信息。國內的大牛早就把這些單詞寫成了中文,完全可以換成漢字,經常用到的專用名詞也基本上都是縮寫。
2、變數名、函數名等標識符,完全可以換個寫法,比如用漢語拼音。
況且,寫代碼時所用的英語並不是普遍意義上使用的英語,而是計算機專用英語。你可以把它理解成是編程語言的基本單位,就像字母構成單詞、偏旁部首構成文字一樣,它所用到的英文詞彙和片語,都是相對簡單的固定片語和句式。實際掌握起來並沒有那麼難,只要在初期學習的時候多花功夫記熟它們,平時多敲多練,慢慢地也就熟練掌握了。
所以,「英語不好就不能編程」,完全是大家理解上的一個誤區。英語不好並不是編程學習的致命障礙,也不是學編程的充分必要條件。
但是值得注意的是,對高級程序員來說,工作上需要解決的項目問題往往是之前沒有接觸過的,甚至是國內還比較少人涉足的。這個時候,如果你英文好(尤其是閱讀能力好),就可以直接獲取外國的相關文獻等一手資料,獲取最新的技術和資訊,學習國外的先進經驗。
從這個層面來看,英語能力雖然不是學編程的必要條件,但卻能給編程事業錦上添花。甚至說,編程可以在無形之中提升你的計算機英語能力。通過對編程的學習,你會對計算機英語有更深刻、清晰的認識,隨著編程學習的深入,對於報錯信息的英文理解也會更加透徹。
最後,給大家一個良心建議:只管去學,別問這么多。如果你真心熱愛編程,其他任何問題都不是問題!
6. for(int a:i)在java 編程中是什麼意思
這是for/in循環,也就是增強的for循環,你看這個例子:
public void testArrayLooping(PrintStream out) throws IOException {
int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };
// Print the primes out using a for/in loop
for (int n : primes) {
out.println(n);
}
}
就是對數組的循環查詢。for/in循環的結構為:
for(
聲明:
表達式)
語句
聲明 是一個變數,例如 Object listElement。這個變數應該有自己的類型,這樣,它就可以與將遍歷的列表、數組或集合中的每一個項兼容。在清單 2 的例子中, list 包含一些對象,因此這些對象就是 listElement 的類型。
表達式 就是一個表達式。它計算的結果應當是可以遍歷的(後面再詳加介紹)。在現在,只要保證 表達式 計算的結果是一個集合或者數組就可以了。表達式可以簡單到就是一個變數(如清單 2 所示)或者是一個方法調用(例如 getList()),亦或是包含布爾邏輯或三目運算符的復雜表達式。只要它返回一個數組或集合,就一切 OK。
語句 代表循環的內容,它對 聲明 中定義的變數進行操作;當然,這是一個循環,所以 語句 將應用到數組中集合的每個項目上。而且,使用大括弧( { 和 })時,還能使用多條語句。
其用法如下:創建一個變數,指向要遍歷的數組或集合,然後對定義的變數進行操作。不用對列表中的每個項目進行賦值,因為 for/in 替您處理了這件事。當然,如果您還覺得不太清楚,沒關系,繼續讀下去,有大量的示例讓您足夠清楚這個事件。
但是,在進行下一步之前,我想用更加符合規范的方式說明 for/in 的工作方式。清單 4 顯示了在提供通用化類型時,實際發揮作用的 for/in 循環。以下是編譯器把該循環轉換成普通的 for 循環之後,語句實際看起來的樣子。
您明白了嗎?編譯器實際上把這個更短、更方便的 for/in 語句變成了一個更加編譯器友好的 for 循環,而且您不會受到這項工作的影響。這就是為什麼我認為它方便,而不僅僅說它更簡短的原因
7. java編程的問題
else if翻譯成中文就是,「否則的話,如果。。。。」
意思是如果上一個條件沒有滿足,就判斷這個if的條件。
當testscore滿足>=80的時候,接下來是不會執行下一個else if的。因為它已經滿足了判斷條件>=80,對於下一個else if不存在否則的情形。
你要想達到你說的那樣,可以去掉else,採用if句式
8. 英語都看不懂能學好編程嗎
其實剛開始學編程是不需要太高深的知識和英語基礎的,所以大家可以放心。如果你英文水平不高,這並不影響你做程序員,編程主要是靠邏輯思維,數學建模。
而且學習編程,常用的單詞就那麼多,只要把常見的單詞學會,你的代碼也能寫的很好。
只是讀文檔的時候可能對英語要求稍微高點,但是你也別忘記還有有道詞典、谷歌翻譯呀。而且在開始階段,壓根不用擔心太多,你學的都是現成的,大不了不懂就查。
比如「if」 「else」 「while」 「for」 「var」 「new」之類。用得多了自然而然地就記住了。
CSS 里英語就更重要了,比如 transition、transform、translate,你在不了解英語含義的情況下,很難把這些記下來。
而且到了後期,你可能還需要讀國外開發者分享的文檔和技術,甚至有不懂的技術,也需要你去國外網站上查,這時候機器翻譯就不大好使了。
所以作為開發者如何學好英語呢?
首先要明白的一點是,常規英語和計算機英語的不同。
常規英語的學習,包含很多方面,有語法,音標,詞彙量等知識面,因此需要背大量的單詞、語法,還要會聽說讀寫,做閱讀、做聽力。
而且在國內,我們從小學開始學英語,十多年了都學不好,想要因為編程短期提升常規英語學習,基本上是不可能的。
然而編程所需要的英語都是十分專業的計算機英語。
簡單的來說,就是通過匯編語言來讓計算機明白所接受的各種指令的英語,對於絕大多數編程軟體來說,它所需要用到的英文片語和詞彙,都是固定的和相對簡單的片語和句式。
相對於常規英語的廣泛程度來說,它更像具有固定格式的專業性更強的英文寫作,往往只要你熟讀熟記後,對於編程是沒有太大的影響。
比如簡單的for next 循環,你可以不知道for和next是什麼意思 ,但是你要知道這是一個循環,還要知道怎麼用。
一言以蔽之,就是英語好的同學編程不一定能學好;編程好的同學,不一定英語很棒。
英語只是編程的輔助工具,而非決定性工具。
所以如何提升編程英語,我這里有兩個小建議:
a) 設備上可以裝翻譯工具,哪裡不會點哪裡。
b) 抓住可以學英語的機會。比如多用英文軟體,少用漢化版。比如用英文操作系統,不用中文版。這樣你每天都在記單詞了。
9. 只用易語言中常用的術語以及術語的含義
1.非運行語句。非運行語句包括以下幾種。 (1)注釋型語句易語言的注釋型語句的格式是:『 注釋語句內容注釋語句不能被程序執行,只是用來解釋上一行或前面代碼的意思。編譯時易語言不會把注釋代碼也編譯到可執行文件中。 2.值型語句。(也可稱屬性型語句)特徵:有一個「=」號將左右兩邊連起來這是大家學習易語言時首先會接觸的一類語句。例如:標簽1.標題 = 「中文編程技術,易語言!」這句代碼的意思是:標簽1的標題是:「中文編程技術,易語言!」——即將標簽1的標題屬性值定為「中文編程技術,易語言!」(所謂賦值)。我們所見的給變數賦值就是用此類語句。賦值語句常見有以下兩類:(1)將某一對象的某種屬性值賦給另一對象。例如:標簽1.標題 = 編輯框5.內容意思即是「標簽1」的標題跟編輯框5中的內容一樣。比如我們在編輯框5中輸入「易語言使英語盲也學會了編程」,那麼在相關事件(如單擊按鈕)的驅動下,標簽1的標題也相應顯示為「易語言使英語盲也學會了編程」。(2)將某一類型的屬性值賦予某個對象。例如:標簽1.標題 = 「中文編程技術,易語言!」將「中文編程技術,易語言!」賦給標簽1的標題。所賦予的屬性值可以是各種類型的,例如:窗口1.可視 = 真這個「真」是一個邏輯型數值。如果是文本型數值要用雙引號,比如剛才的例子:「漢語言編程技術,易語言!」即是。又如,我們會發現這類句子:標簽2.標題 = 到文本 (取小時 (取現行時間 ())) + 「:」 + 到文本 (取分鍾 (取現行時間 ())) + 「:」 + 到文本 (取秒 (取現行時間 ())) 因為標簽類對象只接受文本型數據,所以要把時間型數據轉化為文本型,否則測試時會提示:「所接受的數據類型與傳遞給它的數據類型不一致」。 有時我們會發現此類句子:變數1 = 變數1+10這個語句的意思是:「將變數1加10之後,再將新值傳回給變數1」。 從這里可以看出,這里的「=」號跟數學中的「=」號在含義上是不同的,在數學中不可能出現b=b+2之類的表達式,而在易語言中這種表達式卻是允許的,而且是經常運用的。另外,我們又會看到這類句子:編輯框1.高度 = 取用戶區高度 ()上述程序可以理解為取得「取用戶區高度 ()」的返回值(運算結果),然後將此值賦給編輯框1的高度屬性。 「=」號的右邊表示操控程序的命令,也即是說有時可以將系統命令、執行條件、項目、常量、子程序、函數、資源乃至其它對象的方法等,都可以當作是屬性值賦給對象。 3.方法型語句。方法是一個具體對象能夠執行的動作。有的方法會有參數,有的方法則不用參數,「參數」大概相當於調用這個方法的各種相關數據,包括相關對象屬性值、系統命令、執行條件、項目、常量、子程序、函數乃至其他對象的方法等,都是可以調用的參數。不同的方法有不同的參數,一種方法可以有多種類型的參數。執行、調用一個對象的方法的一般格式如下: 對象名.方法名(參數1,參數2,...)例如需要在一個名為「購物籃」的列表框里添加一個叫「蘋果」的列表項目,其語句如下:購物籃.加入項目(蘋果)上面這句話的意思可以理解為:「將購物籃的加入項目(方法)定為蘋果」。在這個例句中,「加入項目」是「購物籃」的方法,「蘋果」是其參數。其中調用列表框的「加入項目」方法的句式是:列表框.加入項目 (欲加入項目的文本,[與欲加入項目相關的數值])同時我們又會發現另一類句式,比如:銷毀()這個句式跟命令型句式很象,但其實它是下面這個句式的省略表達:組件.銷毀()也即是說調用當前組件的方法句式可省略前面的對象名前綴,它仍然是一種方法型語句。再舉另一例子:組件.彈出菜單(欲彈出的菜單,[水平顯示位置],[垂直顯示位置])可以省略表達成:彈出菜單 (欲彈出的菜單,[水平顯示位置],[垂直顯示位置])
欲查看某類組件具有哪些方法、這些方法的詳細解釋以及有哪些可用參數等,請到易語言設計界面的支持庫面板中的「數據類型」分支中尋找。 下面列舉幾個調用對象方法的例子,以便讓大家舉一反三:(1)在程序中使用常量時其名稱前必須加上「#」符號,所以如果調用的參數中有常量,就在常量前面加上「#」符號,例如:列表框1.調整層次 (#底層)(2)調用系統命令作為參數。例如:畫板1.滾動寫行 (數值到金額 (100, 假))這句的意思是,調用「畫板1」的「滾動寫行」方法。而其欲寫出的數據(參數)是「數值到金額 (100, 假)」(這句的語法請看幫助),這是一種數值轉換命令語句。(3)調用相關對象的屬性值作為方法的參數。例句:列表框.加入項目 (編輯框1.內容,)其它用法就不一一列舉了。 4.命令型語句。命令型語句跟方法型語句差不多,看看下面兩者的對比就知道它們的差別了。方法型語句為:對象名稱.方法名稱(參數,......)而命令型語句的基本格式是:命令名稱 (參數,......)「命令」的意思也跟「方法」差不多,都是一種程序運行動作指令,只不過「方法」是某個具體對象所具有的能供調用的指令,而「命令」則是整個易語言系統固有的、可以供任何程序任何對象調用的指令,所以命令名稱前面沒有前綴的對象名。有時候命令的參數不是必需的(即「可選的」),比如:取隨機數 ([欲取隨機數的最小值],[欲取隨機數的最大值])「[ ]」表示該參數不是必需的。如果是這種情況,該參數可為空。比如:取隨機數 ()
命令型語句的快速輸入方法:在支持庫面板中,雙擊某一個命令或方法,可快速將此命令或方法粘貼到程序行中。
下面再列舉一些常見的命令以便舉一反三:(1)載入窗口命令。我們想通過一個窗口啟動其它窗口,可用此命令,其句式是:載入 (欲載入的窗口,[父窗口],是否採用對話框方式)它的意思請查看有關說明。(2)運行命令。使本程序或其他程序運行,其句式為:運行 (欲運行的命令行,是否等待程序運行完畢,[被運行程序窗口顯示方式])。示例:運行(「C:\windows\notepad.exe」, ,假)(3)信息框命令 。有時我們想使系統反饋指令,比如彈出相關提示,但又找不到有「信息框」這個組件(組件),原來易語言是通過命令調用信息框的(類似的還有輸入框命令),其格式是:信息框 (提示信息,按鈕,[窗口標題])(4)關閉命令。這是一種資料庫操作命令,當指定資料庫操作完畢後,關閉已經被打開的指定資料庫,以便清空數據變數,節約系統資源,其句式是:關閉 ([資料庫別名或名稱])當參數被省略時,表示關閉當前資料庫。(5)結束命令。本命令結束當前易程序的運行,參數為空(無返回值),其格式是:結束 ()最後要說的是,本節只介紹了命令型的基本語句,在以後的學習中將會繼續講解命令型基本語句中的各類語句。 3.8 課後練習 (1)用「如果()」、「如果真()」、「判斷()」分別實現同一個結果。看看哪一種更加方便、容易。思考一下是否因為某些功能實現結果相同,所以其它命令可以不要,只留一個「判斷()」命令即可?
用計次循環可以實現。
用判斷循環也可實現。
(2)用循環命令在編輯框內顯示從11到20。 實際上用其它流程式控制制命令均可實現。
新建一個易程序,分別添加標簽、編輯框、按鈕、編輯框組件。
雙擊按鈕組件後輸入這些程序代碼。最後試運行。
(3)試著將前述程序中的「+ #換行符」刪除,運行後觀察一下效果。「#換行符」是引用了一個系統常量,將在有關常量的章節中講述。
(4)編寫一個程序,計算從1到某數的累加結果。
10. bat.文件的命令語法, 句式或bat文件教程
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令,我們就從他們開始學起。
==== 注 ===========
首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會見到的一些特殊標記符:
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字元引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字元串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標簽引導符
% 批處理變數引導符
其次, :: 確實可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:
第一, 除了 :: 之外, 任何以 :開頭的字元行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是為了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數字的一個特殊符號.
第二, 與rem 不同的是, ::後的字元行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用於 config.sys 文件中.
=====================
echo 表示顯示此命令後的字元
echo off 表示在此語句後所有運行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
call 調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。
pause 運行此句會暫停批處理的執行並在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續
rem 表示此命令後的字元為解釋行(注釋),不執行,只是給自己今後參考用的(相當於程序中的注釋)。
==== 注 =====
此處的描述較為混亂, 不如直接引用個命令的命令行幫助更為條理
-------------------------
ECHO
當程序運行時,顯示或隱藏批處理程序中的正文。也可用於允許或禁止命令的回顯。
在運行批處理程序時,MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。
使用ECHO命令可關閉此功能。
語法
ECHO [ON|OFF]
若要用echo命令顯示一條命令,可用下述語法:
echo [message]
參數
ON|OFF
指定是否允許命令的回顯。若要顯示當前的ECHO的設置,可使用不帶參數的ECHO
命令。
message
指定讓MS-DOS在屏幕上顯示的正文。
-------------------
CALL
從一個批處理程序中調用另一個批處理程序,而不會引起第一個批處理的中止。
語法
CALL [drive:][path]filename [batch-parameters]
參數
[drive:][path]filename
指定要調用的批處理程序的名字及其存放處。文件名必須用.BAT作擴展名。
batch-parameters
指定批處理程序所需的命令行信息。
-------------------------------
PAUSE
暫停批處理程序的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處
理程序中使用該命令。
語法
PAUSE
REM
在批處理文件或CONFIG.SYS中加入註解。也可用REM命令來屏蔽命令(在CONFIG.SYS
中也可以用分號 ; 代替REM命令,但在批處理文件中則不能替代)。
語法
REM [string]
參數
string
指定要屏蔽的命令或要包含的註解。
=======================
例1:用edit編輯a.bat文件,輸入下列內容後存檔為c:\a.bat,執行該批處理文件後可實現:將根目錄中所有文件寫入 a.txt中,啟動UCDOS,進入WPS等功能。
批處理文件的內容為: 命令注釋:
@echo off 不顯示後續命令行及當前命令行
dir c:\*.* >a.txt 將c盤文件列表寫入a.txt
call c:\ucdos\ucdos.bat 調用ucdos
echo 你好 顯示"你好"
pause 暫停,等待按鍵繼續
rem 准備運行wps 注釋:准備運行wps
cd ucdos 進入ucdos目錄
wps 運行wps
批處理文件的參數
批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。
%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字元串。變數可以從%0到%9,%0表示批處理命令本身,其它參數字元串用%1到%9順序表示。
例2:C:根目錄下有一批處理文件名為f.bat,內容為:
@echo off
format %1
如果執行C:\>f a:
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a:
例3:C:根目錄下一批處理文件名為t.bat,內容為:
@echo off
type %1
type %2
那麼運行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。
==== 注 ===============
參數在批處理中也作為變數處理, 所以同樣使用百分號作為引導符, 其後跟0-9中的一個數字構成參數引用符. 引用符和參數之間 (例如上文中的 %1 與 a: ) 的關系類似於變數指針與變數值的關系. 當我們要引用第十一個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下:
初始狀態, cmd 為命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
經過1次shift後, cmd 將無法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
經過2次shift後, arg1也被廢棄, %9指向為空, 沒有引用意義
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8
遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數為基準返復移動起始指針.
=================
特殊命令
if goto choice for是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。
一、if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:
1、if [not] "參數" == "字元串" 待執行的命令
參數如果等於(not表示不等,下同)指定的字元串,則條件成立,運行命令,否則運行下一句。
例:if "%1"=="a" format a:
====
if 的命令行幫助中關於此點的描述為:
IF [NOT] string1==string2 command
在此有以下幾點需要注意:
1. 包含字元串的雙引號不是語法所必須的, 而只是習慣上使用的一種"防空"字元
2. string1 未必是參數, 它也可以是環境變數, 循環變數以及其他字元串常量或變數
3. command 不是語法所必須的, string2 後跟一個空格就可以構成一個有效的命令行
=============================
2、if [not] exist [路徑\]文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。
如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,則顯示它的內容。
****** 注 ********
也可以使用以下的用法:
if exist command
device 是指DOS系統中已載入的設備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內容會因硬軟體環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點:
1. 該設備確實存在(由軟體虛擬的設備除外)
2. 該設備驅動程序已載入(aux, prn等標准設備由系統預設定義)
3. 該設備已准備好(主要是指a: b: ..., com1..., lpt1...等)
可通過命令 mem/d | find "device" /i 來檢閱你的系統中所載入的設備
另外, 在DOS系統中, 設備也被認為是一種特殊的文件, 而文件也可以稱作字元設備; 因為設備(device)與文件都是使用句柄(handle)來管理的, 句柄就是名字, 類似於文件名, 只不過句柄不是應用於磁碟管理, 而是應用於內存管理而已, 所謂設備載入也即指在內存中為其分配可引用的句柄.
==================================
3、if errorlevel <數字> 待執行的命令
很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。
如if errorlevel 2 goto x2
==== 注 ===========
返回值從大到小的順序排列不是必須的, 而只是執行命令為 goto 時的習慣用法, 當使用 set 作為執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變數, 就需使用以下的順序形式:
if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...
當然, 也可以使用以下循環來替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e
更高效簡潔的用法, 可以參考我寫的另一篇關於獲取 errorlevel 的文章
出現此種現象的原因是, if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重復" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼.
另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作為命令行切分符而忽略掉罷了
===========================
二、goto 批處理文件運行到這里將跳到goto所指定的標號(標號即label,標號用:後跟標准字元串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。
如:
goto end
:end
echo this is the end
標號用":字元串"來定義,標號所在行不被執行。
==== willsort 編注
label 常被譯為 "標簽" , 但是這並不具有廣泛的約定性.
goto 與 : 聯用可實現執行中途的跳轉, 再結合 if 可實現執行過程的條件分支, 多個 if 即可實現命令的分組, 類似 C 中 switch case 結構或者 Basic 中的 select case 結構, 大規模且結構化的命令分組即可實現高級語言中的函數功能. 以下是批處理和C/Basic在語法結構上的對照:
Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if... switch&case / select case
goto&:&if&set&envar... function() / function(),sub()
==================================
三、choice 使用此命令可以讓用戶輸入一個字元(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。
注意:choice命令為DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。
choice的命令語法(該語法為Windows 2003中choice命令的語法,其它版本的choice的命令語法與此大同小異):
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
該工具允許用戶從選擇列表選擇一個項目並返回所選項目的索引。
參數列表:
/C choices 指定要創建的選項列表。默認列表是 "YN"。
/N 在提示符中隱藏選項列表。提示前面的消息得到顯示,
選項依舊處於啟用狀態。
/CS 允許選擇分大小寫的選項。在默認情況下,這個工具
是不分大小寫的。
/T timeout 做出默認選擇之前,暫停的秒數。可接受的值是從 0
到 9999。如果指定了 0,就不會有暫停,默認選項
會得到選擇。
/D choice 在 nnnn 秒之後指定默認選項。字元必須在用 /C 選
項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。
/M text 指定提示之前要顯示的消息。如果沒有指定,工具只
顯示提示。
/? 顯示幫助消息。
注意:
ERRORLEVEL 環境變數被設置為從選擇集選擇的鍵索引。列出的第一個選
擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0
的 ERRORLEVEL 值。在一個批程序中使用 ERRORLEVEL 參數時,將參數降
序排列。
示例:
CHOICE /?
CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"
==== willsort 編注 ===============================
我列出win98下choice的用法幫助, 已資區分
Waits for the user to choose one of a set of choices.
等待用戶選擇一組待選字元中的一個
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
/C[:]choices Specifies allowable keys. Default is YN
指定允許的按鍵(待選字元), 默認為YN
/N Do not display choices and ? at end of prompt string.
不顯示提示字元串中的問號和待選字元
/S Treat choice keys as case sensitive.
處理待選字元時大小寫敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒後默認選擇 c
text Prompt string to display
要顯示的提示字元串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被設置為用戶鍵入的字元在待選字元中的偏移值
如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
屏幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批處理運行後,將顯示"defrag,mem,end[D,M,E]?" ,用戶可選擇d m e ,然後if語句根據用戶的選擇作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,批處理運行結束。
四、for 循環命令,只要條件符合,它將多次執行同一命令。
語法:
對一組文件中的每一個文件執行某個特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。
例如一個批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
則該命令行會顯示當前目錄下所有以bat和txt為擴展名的文件的內容。
==== willsort 編注 =====================================================
需要指出的是, 當()中的字元串並非單個或多個文件名時, 它將單純被當作字元串替換, 這個特性再加上()中可以嵌入多個字元串的特性, 很明顯 for 可以被看作一種遍歷型循環.
當然, 在 nt/2000/xp/2003 系列的命令行環境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字元串, 也有很多開關被用於擴展了文件替換功能.
========================================================================
批處理示例
1. IF-EXIST
1) 首先用記事本在C:\建立一個test1.bat批處理文件,文件內容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
然後運行它:
C:\>TEST1.BAT
如果C:\存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,如果不存在,批處理就會提示你該文件不存在。
2) 接著再建立一個test2.bat文件,內容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
執行:
C:\>TEST2 AUTOEXEC.BAT
該命令運行結果同上。
說明:
(1) IF EXIST 是用來測試文件是否存在的,格式為
IF EXIST [路徑+文件名] 命令
(2) test2.bat文件中的%1是參數,DOS允許傳遞9個批參數信息給批處理文件,分別為%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關系,%1是形參,AUTOEXEC.BAT是實參。
==== willsort 編注 =====================================================
DOS沒有 "允許傳遞9個批參數信息" 的限制, 參數的個數只會受到命令行長度和所調用命令處理能力的限制. 但是, 我們在批處理程序中, 在同一時刻只能同時引用10個參數, 因為 DOS只給出了 %0~%9這十個參數引用符.
========================================================================
3) 更進一步的,建立一個名為TEST3.BAT的文件,內容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
如果運行:
C:\>TEST3 A B C
屏幕上會顯示:
XIAO
TIAN
XIN
如果運行:
C:\>TEST3 A B
屏幕上會顯示
XIAO
TIAN
在這個命令執行過程中,DOS會將一個空字元串指定給參數%3。
2、IF-ERRORLEVEL
建立TEST4.BAT,內容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件
然後執行文件:
C:\>TEST4
如果文件拷貝成功,屏幕就會顯示"成功拷貝文件",否則就會顯示"文件拷貝失敗"。
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤
無論拷貝是否成功,後面的:
未找到拷貝文件
用戶通過ctrl-c中止拷貝操作
預置錯誤阻止文件拷貝操作
拷貝過程中寫盤錯誤
都將顯示出來。
以下就是幾個常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由於致命的錯誤使備份操作中止
diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過ctrl-c中止比較操作
3 由於致命的錯誤使比較操作中止
4 預置錯誤中止比較
disk
0 盤拷貝操作成功
1 非致命盤讀/寫錯
2 用戶通過ctrl-c結束拷貝操作
3 因致命的處理錯誤使盤拷貝中止
4 預置錯誤阻止拷貝操作
format
0 格式化成功
3 用戶