建安二十年(乙未,公元215年)三月,魏公曹*親自率兵攻打張魯,準備自武都進入氐人所居之地。氐人在途中攔截,曹*派張頜、朱靈打敗了氐人。夏季,四月,曹*從陳倉出散關,到達河池。氐王竇茂有部眾一萬余人,仗恃地勢險要,不肯降服。五月,曹軍打敗氐人,並進行屠殺。西平、金城的演、蔣石等將領共同殺死韓遂,把他的頭顱獻給曹*。
秋季,七月,魏公曹*抵達陽平。張魯準備以漢中為代價投降曹*,他的弟弟張衛不同意,率兵眾數萬人憑借關隘堅守,在山上橫向築城牆十余里。當初,曹*听了涼州從事及從武都投降過來的人所說的話︰「張魯容易被擊敗,陽平城外的南、北山相距很遠,無法防守。」便相信了。等他親自實地觀察後,發現不像所听說的那樣,因而感嘆地說︰「別人的揣度,很少能令人滿意。」攻打陽平山守軍時,山勢險峻難登,不能及時攻取,士兵死傷很多,軍糧也快用盡。曹*心情沮喪,便想讓軍隊開撥,切斷山道以後撤走,派大將軍夏侯、將軍許褚喊回山上的戰士。恰巧,前部軍隊在夜間迷路,誤入張衛下屬軍營,張衛的士兵大驚潰散。侍中辛毗、主簿劉曄等人跟在迷路士兵之後,便報告夏侯、許褚說︰「我軍已經佔據了敵人的重要據點,敵人已經潰散。」夏侯等人還不信。夏侯親眼目睹後,才回去報告了曹*,繼續進兵攻打張衛,張衛等人乘夜逃走。
張魯听說陽平已被曹軍攻陷,要投降。閻圃說︰「現在因為受到曹軍壓力而被迫投降,一定沒有什麼功;不如通過杜投奔樸胡,一同抗拒曹軍,然後再歸順,功一定大。」于是逃奔南山進入巴中。張魯部下要燒毀全部寶物和倉庫,張魯說︰「本來我們準備歸順國家,而這樣的意願還沒有轉達上去。如今離開這里,只是為了躲避大軍的鋒銳,並沒有惡意。寶物倉庫,本是國家所有。」于是,把府庫封存好以後,張魯等人才離去。曹*進入南鄭,對張魯的作法非常贊賞。又因為張魯原本有善意,派人前往安慰曉諭。
丞相主簿司馬懿向曹*建議︰「劉備靠奸詐動持了劉璋,蜀人還沒有歸附他,他卻去遠行爭奪江陵,這是個不能失去的好機會。現在,我們攻克了漢中,益州受到震動,此時進兵攻擊,勢必土崩瓦解。聖人不能違背天時,也不能錯過良機。」曹*說︰「人都是苦于不知足,既得到隴地,又眼望著蜀地嗎!」劉曄說︰「劉備,是人中豪杰,做事有章法,但是緩慢;取得蜀地時間不長,還不能依靠蜀人。我們剛剛攻取漢中,蜀地之人受到很大震動,非常恐慌,勢將自行崩潰。以主公的英明,趁其崩潰時率兵壓境,一定能取勝。如果稍有遲緩,諸葛亮擅長治國而為相,關羽、張飛勇冠三軍而為將,蜀地人民安定以後,據守險要之處,我們就很難進攻了。現在不去攻取,必將成為我們的後患。」曹*沒有听從這些建議。七天後,蜀地來降的人說︰「蜀中一天發生數十次驚憂,守將雖然以斬殺來彈壓,仍然安定不下來。」曹*問劉曄︰「現在還能進攻嗎?」劉曄回答︰「現在蜀地已初步安定,不能再進攻。」于是撤軍。任命夏侯淵為都護將軍,率領張、徐晃等人守衛漢中;任命丞相長史杜襲為附馬都尉,留下掌管漢中的事務。杜襲采取懷柔政策進行開導,漢中的百姓自願出來遷徙到洛、鄴兩地的有八萬余人。(得隴望蜀,如果听了司馬的話,可能劉備就不能在蜀中稱帝了)
八月,孫權趁曹*在漢中,率軍隊十萬人圍攻合肥。此時,張遼、李典、樂進率七千人在合肥駐守。魏公曹*去征討張魯,留一份指令給合肥護軍薛悌,在指令的封套邊上寫道︰「敵人來了,再找開看。」及至孫權到來,薛悌等人打開指令,指令中寫道︰「假若孫權到來,張、李將軍出戰迎敵,樂將軍守城,護軍不要參戰。︰將軍們認為寡不敵眾,對曹*的指示有懷疑。張遼說︰「魏公遠征張魯,等他派救兵到達,敵人必定已將我們攻破了。所以他指示趁敵人未集結時予以迎頭抗擊,以摧折敵軍鋒芒,安定我軍軍心,然後才可能拒守。」樂進等人都不發言。張遼氣憤地說︰「勝負的關鍵,在此一戰。諸位若還有疑問,我張遼將獨自出戰,以決勝負。」李典原本與張遼不和,卻感慨地說︰「這是國家大事,只是看您的計謀將會怎樣罷了,我怎麼能因為私人的恩怨而損害公義呢!我請求和您一起出戰。」于是,張遼當夜募集敢于自己出戰的兵士八百人,殺牛設宴隆重犒賞他們。第二天清晨,張遼身穿鎧甲,手持戰戟,身先士卒,沖鋒陷陣,殺死數十人,斬敵兩員大將,高喊「我是張遼」,沖破敵兵營壘,直到孫權的大旗下。孫權大驚,不知所措,退上一座高丘,用長戟抵御。張大聲叫喊著,要孫權下來交戰,孫權不敢動,看到張遼所帶的人馬並不多,乃下令將張遼重重包圍。張遼急忙打開重圍,帶領部下數十人沖出來。其余的人高喊︰「將軍要拋棄我們嗎?」張遼又返身殺回,再度突圍,救出其余的戰士。孫權的人馬都望風披靡,不敢抵擋。從清晨一直戰到中午,東吳的士兵喪失了斗志。張遼這才命令回城,部署守城,整修城防,人心軍心于是安定。
孫權包圍合肥十多天,無法攻陷,便撤軍返回。十兵們已經上路,孫權和部下將領們在逍遙津北岸,張遼從遠處看到後,便率領步、騎兵突然殺到。甘寧與呂蒙等人奮力抵御,凌統率領親兵扶孫權沖出包圍,又殺進去與張遼奮戰,身邊的戰士全部戰死了,他自己也受了傷,佑計孫權已無危險,他才退回去。孫權乘駿馬來到逍遙津橋上,橋南部的橋板已撤去,有一丈多寬沒有橋板。親近監谷利在孫權馬後,要孫權抓住馬鞍,放松韁繩,他在後面猛烈用鞭抽馬,加強馬的沖勢,于是飛躍過去。賀齊率三千人在逍遙津南岸迎接,孫權因此得免于難。
孫權登上大船,在船艙設宴飲酒,賀齊從席間走出,哭著說︰「主公無比尊貴,應處處小心謹慎,今天的事情,幾乎造成巨大災難。我們這些部屬都非常驚恐,如同天塌地陷,希望您終身記住這一教訓!」孫權親自上前為賀齊擦去眼淚說︰「很慚愧,我把這次教訓銘刻在心中,不僅僅寫在束身的大帶上。」
九月,巴、夷兩個少數部族首領樸胡、杜、任約,各率全體部眾歸附朝廷。于是朝廷劃分巴郡,以樸胡為巴東太守,杜為巴西太守,任約為巴郡太守,三人都被封為列侯。
十一月,張魯率領家屬出來投降。魏公曹*親迎,授予張魯鎮南將軍的官職,按照賓客的禮節接待他,封他為閬中侯,食邑萬戶。同時,封張魯的五個兒子,以及閻圃等人為列侯。
程銀、侯選、龐德都隨張魯歸降曹*。魏公曹*恢復了程銀、侯選的官爵,授予龐德立義將軍的職位。
張魯逃奔巴中時,黃權對劉備說︰「如果失去漢中,則三巴將很難挽救,這等于割去了蜀的四肢。」劉備因此任命黃權為護軍,率領兵將去迎接張魯;因張魯已歸降了曹*,黃權便去攻打樸胡、杜、任約,獲勝。魏公曹*派張頜統領軍隊佔領三巴,企圖把那里的民眾遷徙到漢中,張頜率軍向岩渠進發。劉備派遣巴西太守張飛抗拒張頜。五十多天後,張飛向張頜發動襲擊,張頜大敗,退回南鄭。劉備也回到成都。
曹*分出原屬于韓遂、馬超的士卒五千余人,派平難將軍殷署等人統領,又任命扶風太守趙儼為關中護軍。曹*命令趙儼派兵一千二百加強漢中防務,由殷署監督送往漢中,將要被派往漢中的十兵很不情願。趙儼送這些人到斜谷口後返回,尚到軍營,殷署的部隊發生叛亂。跟隨趙儼的步、騎兵一百五十人,都是叛軍的親戚同黨,他們听說叛亂以後,都很驚慌,穿戴好鎧甲,手執兵器,惶惶不安。趙儼從容地對他們分析了成敗得失,懇切地加以撫慰勉勵,士兵們都慷慨地說︰「不論生死,我們都會跟隨護軍,不敢有二心!」他們前往各營,分別召喚、鑒別那些結黨叛亂者,共八百余人,分散在田野中。趙儼下令︰只取那些謀劃叛亂的首領進行懲治,其余的一概不追究。郡縣將所逮捕的人全部釋放,于是叛兵相繼回來投降。趙儼秘密上報︰「應當將這批人送到大營,請用舊部隊來鎮守關中。」魏公曹*派將軍劉柱率兩千人前往,約定等抵達後再發遣關中兵。不久事情泄露。各營非常驚恐,用勸導已不能使眾人安定下來。趙儼于是宣布︰「我將在你們當中挑選溫和老實的一千人留下,鎮守關中,其余的全都派往東方。」于是召見主管官員,命令呈上各營士兵名冊,立刻進行擇別。留下來的人情緒穩定,與趙儼同心,那些該走的人也不敢有所舉動。趙儼在一天內將該走的人全部發遣上路,並將所留下的一千人分布到各處守置。不久,劉柱所率部隊從東方趕到,趙儼于是再次威脅勸導,將留下的一千人也一並發遣,讓他們跟在先前被發遣的部隊後面,一同前往東方。總共安全送到東方二萬余人。