漢建安十六年(公元211年)三月,曹操任命司隸校尉鍾繇攻打張魯,命令征西護軍夏侯等人,率領大軍從河東出發,與鍾繇會合。
倉曹屬高柔勸曹操說:“大軍西進,韓遂、馬超會懷疑我們是去偷襲他們,一定會互相煽動。丞相您應當先安撫三輔地區,平定了三輔,隻要往各地區發放檄文,就可以平定漢中。”曹操不聽。
關中的將領果然起了疑心,馬超、韓遂、侯選、程銀、楊秋、李堪、張橫、梁興、成宜、馬玩等十支部隊起兵反叛,加在一起有十萬人馬,據守潼關。曹操派安西將軍曹仁統帥各將領抵抗,讓他們堅守營寨,不要出戰。命令五宮中郎將曹丕留下駐守鄴城,讓奮武將軍程昱協助曹丕處理軍務;任命門下督徐宣為左護軍,在鄴城統率各部;任命樂安人國淵為丞相府的居府長史,負責留守事務。
七月,曹操親自率領大軍,攻打馬超等人。
許多參與軍務的人都說:“函穀關以西的士兵擅長使用長矛,不挑選精銳的部隊作前鋒,是抵擋不住的。”
曹操說:“戰事的主動權在我,不在敵人。他們雖然善用長矛,我會讓他們的長矛無用武之地。你們就等著看好了。”
八月,曹操抵達潼關,與馬超等人隔著潼關安營紮寨。曹操急著控製局勢,暗中派遣徐晃、朱靈率領步兵、騎兵四千人渡過蒲阪渡口,到黃河以西紮營。
閏八月,曹操從潼關向北渡過黃河,大軍先渡,曹操與虎賁武士一百多人留在南岸斷後。這時馬超率領步兵、騎兵一萬多人前來進攻,箭像雨點一樣飛來,曹操仍然坐在折凳上不動。許褚扶曹操上船,撐船的人被流箭射中死了,許褚左手舉起馬鞍為曹操抵擋亂箭,右手撐船。校尉丁斐把曹軍攜帶的牛馬放出來引誘敵人,馬超的軍隊大亂,士兵都爭著去搶牛馬,曹操才得以渡過黃河。
曹操大軍從蒲阪渡過西河,沿河開鑿甬(yǒnɡ)道,逐漸向南推進。馬超等人退守渭口,也就是渭水流進黃河的入口。曹操設下許多疑兵,暗中卻用船載著士兵進入渭水,修築浮橋,然後趁夜另派士兵到渭水南岸紮下營壘。馬超等人連夜進攻,被埋伏的士兵打敗。馬超等人到渭南駐軍,派使者求和,說願意割讓黃河以西的土地。曹操不答應。
九月,曹操進軍,全部軍隊都渡過渭水。馬超等人屢次挑戰,曹操都不與他們交戰;又一再求和,要割讓土地,並送兒子做人質。賈詡認為可以假裝答應,曹操問他下一步怎麽辦,賈詡說:“離間他們。”曹操說:“我明白了。”
曹操與韓遂以前有過交情,韓遂請求與曹操相見,曹操就答應了。他們騎馬著聊天,聊了很久,並不討論正事,隻說些在京城的舊友往事,高興時拍手歡笑。當時,當地的關中人與胡人都來看熱鬧,前前後後圍了好多人,曹操笑著對他們說:“你們來看曹操嗎?曹操也是人,並不是有四隻眼睛兩張嘴,隻是智謀多一些罷了。”
會麵結束後,馬超等人問韓遂:“你們說了些什麽?”韓遂說:“沒說什麽。”馬超等人懷疑韓遂。有一天,曹操給韓遂寫了一封信,信中圈改塗抹了很多,弄得就像是韓遂改過一樣,馬超等因此更加懷疑韓遂。
曹操與馬超等約定日期交戰。曹操先派小部隊挑戰,與馬超等交戰良久,才派精銳騎兵夾擊,大獲全勝,斬殺了成宜、李堪等。韓遂、馬超逃奔涼州,楊秋逃奔安定。將領們問曹操說:“當初,敵軍據守潼關,渭水以北的道路都沒有設防。但您不從黃河以東進攻馮翊,反而在潼關附近駐紮,待了些日子,才北渡黃河,為什麽?”
曹操說:“敵軍據守潼關,如果我軍進入河東,敵軍就會據守各處渡口,我們就無法渡過西河了。我故意集中大部隊開往潼關,敵軍也就在那兒集中防守,西河的戒備鬆懈,所以徐晃、朱靈兩位將軍能夠輕易奪取西河。然後我再率領大軍北渡黃河,敵軍無法與我爭奪西河,因為已經有兩位將軍在那裏駐軍了。
我連結車輛,打下木柵,開鑿甬道往南推進,既是為了安全,也是向敵軍示弱;渡過渭水後修築營壘,敵人挑戰而堅守不出,是讓敵軍驕傲自滿,因此敵軍沒有修築營壘,而隻是請求割地。我答應他們,是為了使他們自以為安全而不加防備。同時,我們養精蓄銳,一旦進攻,就迅雷不及掩耳。用兵之道,變化莫測,本來就不能拘泥於一種方法。”
關中各將領紛紛率軍趕來,每來一支部隊,曹操都很高興。部下將領覺得奇怪,就問他原因,曹操說:“關中地域遼闊,如果他們各自據守關隘險要,我們要征討他們,不用上一年兩年是平定不了的。現在,他們自己集中在一起,人數雖多,但相互之間誰也不服誰。軍隊沒主帥,可以一舉消滅,比一個一個征討要容易多了。所以我見他們來,就很高興。”
十月,曹操從長安出發,向北討伐楊秋,將安定包圍。楊秋投降,曹操恢複他的爵位,讓他留下來安撫百姓。
十二月,曹操從安定回師,派夏侯淵駐守長安,任命議郎張既為京兆尹。張既安撫流亡的難民百姓,使他們重返家園,興建並恢複縣城村鎮,百姓很擁戴他。