1369 年(洪武二年,至正二十九年),徐達平定陜西用了半年左右的時間, 但如果從他出師北伐之時算起,到現在差不多已連續奮戰了兩年,也基本達到了驅逐胡虜、恢復中原的目的。戰爭持續到這個時候,在北方唯一有實力與明軍唱對臺戲的只有王保保集團了。徐達連續在山西與陜西等地多次挫敗過王保保,對其難免存有“不足為患”的輕敵情緒,再加上將士們久戰疲憊,需要進行休整,因而班師回朝也是水到渠成的事,同年九月,徐達、湯和率主力從平涼出發返回京師,留下馮勝在陜西主持大局(但馮勝誤以為關陜已定,不久便擅自率部屬返京,朱元璋大怒,對其加以切責,因念其功大,未予治罪)。二個月后,明軍大部隊回到京師,北伐暫告一段落,
然而,事實證明徐達低估了王保保的實力,王保保派到陜西支援張良臣的部隊雖然受挫,但實力并未受損,他在塞外待機而動,準備發起空前規模的反攻。到了十二月,王保保確信徐達已經返回應天,知道反攻的時機已到,馬上動員軍隊從甘肅殺向陜西,并把突破口選在位置比較偏遠的蘭州。
元軍蜂擁而至,來到蘭州城下,守將張溫臨危不懼地對部屬說:“敵眾我寡, 本來難以迎戰,然而敵人遠道而來,未知我方虛實,因而我軍在暮色的掩護下出擊,可挫其鋒。如果敵人還不退,則固守以待援。”于是,守軍冷不防殺出城來,逼得元軍一度退卻,然后再收兵回城,堅守不出。
明軍只知道敵軍人多勢眾,但弄不清楚對方到底來了多少人,鎮守鞏昌的于光緊急來援,不料進至蘭州附近的馬蘭灘時卻被優勢之敵所圍而成為俘虜。元軍把于光帶到蘭州,勒令其在城下呼叫“張將軍投降”,企圖開展心理戰,打擊守軍士氣。沒想到于光是個鐵骨錚錚的硬漢子,他反而大喊:“我不幸被捉,諸公要堅守下去,徐總兵(指徐達)帶援兵就快到了!”元軍士卒大怒,當場痛擊其面,接著將其殺害。守軍受到于光的激勵,士氣高昂,決意死守下去。
蘭州被圍的消息在1370 年(洪武三年, 至正三十年)年初已傳到應天,朝廷大震。朱元璋以西北敵情嚴重,命令徐達為征虜大將軍,李文忠為左副將軍,馮勝為右副將軍,鄧愈為左副將軍,湯和為右副副將軍,大舉出征。
朱元璋在諸將動身之前召開了一個軍事會議,會議指出當前的形勢不容樂觀:在東線,滯留于塞外的元君讓元朝遺民仍存僥幸之心;在西線,王保保以孤軍進犯蘭州,欲爭寸土之利,因而元順帝與王保保,誰將成為明軍重點打擊的對象就成了急需解決的問題。為此,朱元璋問道:“卿等出師,打算首先攻打何處之敵?”諸將一致認為王保保在西線為非作歹,是因為元順帝還存在影響力的緣故,因而“若以師直取元主,則王保保失勢,可不戰而降”,
朱元璋卻有獨到的見解, 認為放過在西線興風作浪的王保保,而僅僅打擊東線的元順帝,是“忘近而趨遠”, 犯了不分輕重緩急的錯誤,他自忖兵多將廣,意欲同時對付兩人,決定分兵二路——一路以徐達為首,自潼關出西安,搗定西, 直取王保保;一路以李文忠為首,出居庸, 入沙漠,追擊元順帝,使各處之敵自顧不暇,難以互相救援,這位開國皇帝特別指出元順帝遠居塞外的荒漠地帶,對明軍可能會疏于防范,一旦出其不意地殺到他的老巢,定如“狐豚之遇猛虎,取之必矣”,結論是兩路出征,可一舉兩得,諸將表示贊同,遂受命而行。在此期間,明軍駐守于北平、大同等地的守將紛紛主動清剿塞內外的殘元勢力,并在云州(今赤城以北)、東勝州、武州(今五寨以北)、朔州等地獲得了一些戰果,各地的元軍散兵游勇互相配合、協同作戰,
徐達奉命重返西線,他以馮勝、鄧愈、湯和為副手,調集了潼關以東的各路部隊, 以號稱“四十萬”之眾西進,經過急行軍,于同年四月從萬里之外趕到了陜西的定西, 距離蘭州僅有兩日路程。將士們正在摩拳擦掌準備打破元軍包圍圈的時候,徐達卻突然下令部隊停止前進,他對身邊的人解釋道:我軍留在此地安營,實際上已經和蘭州守軍內外呼應,一起對元軍形成夾擊之勢,王保保為了避免腹背受敵會主動解圍而趕來此地與我軍作戰,等到他們來時,我軍經過休息之后正好以逸待勞,一戰而勝!這表明具有豐富作戰經驗的徐達清楚地知道,明軍士兵經過長途行軍后身體疲憊,確實需要休息一兩天以迎接即將到來的大戰。此外,這支以步兵為主的部隊能夠提前在自己選擇的戰場上建立鞏固的陣營,有利于防止敵人騎兵大規模的沖擊,
蘭州守軍憑著城中儲存的大量糧食堅持到了現在,相反,元軍遠道而來,糧食日漸告罄,王保保圍城數月,無尺丈之利,正處于進退失據之勢。他得知明軍援兵到達的消息后被迫解開蘭州之圍,帶領軍隊迎戰徐達的援軍,但他過去多次敗于徐達之手,變得謹慎起來,因此沒有立刻攻擊明軍建立于定西的軍營,而是退到離定西西北百余里的車道峴,與對手遙相對壘,徐達見王保保沒有上鉤,便改變“以逸待勞”之策,下令明軍主動以“步步為營”的方式出擊。打頭陣的左副將軍鄧愈指揮部下靠近敵軍,在陣地之前樹立起用竹木等物做成的柵欄,以起到阻礙騎兵的作用,不久,明軍全部轉移到車道峴以南的沈兒峪,隔著一條深壕與元軍展開較量。
就這樣,又一場轟轟烈烈的大決戰爆發了,激烈的戰斗一日展開數次,兩軍難分高下。為了打破僵局,王保保大膽使用劫營之計,決定從軍中選擇千余精兵突擊明軍陣線的薄弱點,如果能成功突破敵陣,后繼部隊便可趁機向縱深長驅直入分割殲敵,奪取最后的勝利,元軍向來有使用騎兵打頭陣的傳統,因為騎兵可在最短的時間內發起奇襲,以迅雷不及掩耳之勢沖到敵陣之前廝殺,根據《國榷》的記載,奉命出擊的千余精兵全是騎兵,他們悄悄地走小路,突然從東山沖下來,避開明軍的正面陣地,向位置比較偏僻的東南營壘發起猛攻。明軍的營壘之前盡管樹立了柵欄等阻擋騎兵的障礙物,但還是被打了個措手不及,顯得驚慌失措,幸而徐達及時帶領親兵趕到擊退來犯之敵,并斬了幾名臨陣退縮的將領,以整肅軍紀,
次日,明軍發起總攻,將士們爭先恐后奮勇前進,硬是打穿了元兵的大營,一直打到軍營后面的亂葬崗中,終于大獲全勝,活捉了包括北元剡王、文濟王、國公閻思孝、平章虎林赤、嚴奉先、李克彝、察罕不花等在內的上千名文臣武將,其中王保保屬下著名的騎兵將領韓扎兒也成了俘虜,此外還俘虜士卒八萬四千五百余人,繳獲戰馬一萬五千二百八十余匹與相同數量的駱駝、驢騾等牲畜。
王保保幸運地突出重圍,又一次成了漏網之魚,他與妻子、親信等數人向北逃遁,依靠從水中打撈的“流木”渡過黃河, 經寧夏奔向蒙古草原的和林,明將郭英以騎兵追至寧夏,不及而還,
明軍經過這一場規模空前的大戰,牢固地控制了陜西地區。徐達在太原決戰結束一年半之后,又一次在生死較量中打敗了王保保,此戰與太原決戰的不同之處是騎兵不再發揮決定性的作用,而是需要步兵的密切配合,兩軍在大部分時間里都以步兵列陣攻防為主,明軍能夠取得勝利顯然還得益于糧餉的充足,因為元軍此前在圍攻蘭州時糧食已經告罄,如今在車道峴餓著肚子打仗,慘敗不足為奇。王保保正確的打法應該是在明朝援軍到來之后,立即退回塞外,在遼闊的蒙古草原上用游擊戰和運動戰的方式與明軍周旋,但他沒有及時將戰略進攻變為戰略防御,反而總是企求“畢其功于一役”,幻想通過一次決戰殲滅占有優勢的明軍,以挽救元朝亡國的命運,這種不良的心態使他在太原之敗后好不容易積累起來的力量在一次豪賭中輸得慘不忍睹,
本文摘自《明蒙戰爭:明朝軍隊征伐史與蒙古騎兵盛衰史》