汉建安十六年(公元211年)三月,曹操任命司隶校尉钟繇攻打张鲁,命令征西护军夏侯等人,率领大军从河东出发,与钟繇会合。
仓曹属高柔劝曹操说:“大军西进,韩遂、马超会怀疑我们是去偷袭他们,一定会互相煽动。丞相您应当先安抚三辅地区,平定了三辅,只要往各地区发放檄文,就可以平定汉中。”曹操不听。
关中的将领果然起了疑心,马超、韩遂、侯选、程银、杨秋、李堪、张横、梁兴、成宜、马玩等十支部队起兵反叛,加在一起有十万人马,据守潼关。曹操派安西将军曹仁统帅各将领抵抗,让他们坚守营寨,不要出战。命令五宫中郎将曹丕留下驻守邺城,让奋武将军程昱协助曹丕处理军务;任命门下督徐宣为左护军,在邺城统率各部;任命乐安人国渊为丞相府的居府长史,负责留守事务。
七月,曹操亲自率领大军,攻打马超等人。
许多参与军务的人都说:“函谷关以西的士兵擅长使用长矛,不挑选精锐的部队作前锋,是抵挡不住的。”
曹操说:“战事的主动权在我,不在敌人。他们虽然善用长矛,我会让他们的长矛无用武之地。你们就等着看好了。”
八月,曹操抵达潼关,与马超等人隔着潼关安营扎寨。曹操急着控制局势,暗中派遣徐晃、朱灵率领步兵、骑兵四千人渡过蒲阪渡口,到黄河以西扎营。
闰八月,曹操从潼关向北渡过黄河,大军先渡,曹操与虎贲武士一百多人留在南岸断后。这时马超率领步兵、骑兵一万多人前来进攻,箭像雨点一样飞来,曹操仍然坐在折凳上不动。许褚扶曹操上船,撑船的人被流箭射中死了,许褚左手举起马鞍为曹操抵挡乱箭,右手撑船。校尉丁斐把曹军携带的牛马放出来引诱敌人,马超的军队大乱,士兵都争着去抢牛马,曹操才得以渡过黄河。
曹操大军从蒲阪渡过西河,沿河开凿甬(yǒnɡ)道,逐渐向南推进。马超等人退守渭口,也就是渭水流进黄河的入口。曹操设下许多疑兵,暗中却用船载着士兵进入渭水,修筑浮桥,然后趁夜另派士兵到渭水南岸扎下营垒。马超等人连夜进攻,被埋伏的士兵打败。马超等人到渭南驻军,派使者求和,说愿意割让黄河以西的土地。曹操不答应。
九月,曹操进军,全部军队都渡过渭水。马超等人屡次挑战,曹操都不与他们交战;又一再求和,要割让土地,并送儿子做人质。贾诩认为可以假装答应,曹操问他下一步怎么办,贾诩说:“离间他们。”曹操说:“我明白了。”
曹操与韩遂以前有过交情,韩遂请求与曹操相见,曹操就答应了。他们骑马着聊天,聊了很久,并不讨论正事,只说些在京城的旧友往事,高兴时拍手欢笑。当时,当地的关中人与胡人都来看热闹,前前后后围了好多人,曹操笑着对他们说:“你们来看曹操吗?曹操也是人,并不是有四只眼睛两张嘴,只是智谋多一些罢了。”
会面结束后,马超等人问韩遂:“你们说了些什么?”韩遂说:“没说什么。”马超等人怀疑韩遂。有一天,曹操给韩遂写了一封信,信中圈改涂抹了很多,弄得就像是韩遂改过一样,马超等因此更加怀疑韩遂。
曹操与马超等约定日期交战。曹操先派小部队挑战,与马超等交战良久,才派精锐骑兵夹击,大获全胜,斩杀了成宜、李堪等。韩遂、马超逃奔凉州,杨秋逃奔安定。将领们问曹操说:“当初,敌军据守潼关,渭水以北的道路都没有设防。但您不从黄河以东进攻冯翊,反而在潼关附近驻扎,待了些日子,才北渡黄河,为什么?”
曹操说:敌军据守潼关,如果我军进入河东,敌军就会据守各处渡口,我们就无法渡过西河了。我故意集中大部队开往潼关,敌军也就在那儿集中防守,西河的戒备松懈,所以徐晃、朱灵两位将军能够轻易夺取西河。然后我再率领大军北渡黄河,敌军无法与我争夺西河,因为已经有两位将军在那里驻军了。
我连结车辆,打下木栅,开凿甬道往南推进,既是为了安全,也是向敌军示弱;渡过渭水后修筑营垒,敌人挑战而坚守不出,是让敌军骄傲自满,因此敌军没有修筑营垒,而只是请求割地。我答应他们,是为了使他们自以为安全而不加防备。同时,我们养精蓄锐,一旦进攻,就迅雷不及掩耳。用兵之道,变化莫测,本来就不能拘泥于一种方法。
关中各将领纷纷率军赶来,每来一支部队,曹操都很高兴。部下将领觉得奇怪,就问他原因,曹操说:“关中地域辽阔,如果他们各自据守关隘险要,我们要征讨他们,不用上一年两年是平定不了的。现在,他们自己集中在一起,人数虽多,但相互之间谁也不服谁。军队没主帅,可以一举消灭,比一个一个征讨要容易多了。所以我见他们来,就很高兴。”
十月,曹操从长安出发,向北讨伐杨秋,将安定包围。杨秋投降,曹操恢复他的爵位,让他留下来安抚百姓。
十二月,曹操从安定回师,派夏侯渊驻守长安,任命议郎张既为京兆尹。张既安抚流亡的难民百姓,使他们重返家园,兴建并恢复县城村镇,百姓很拥戴他。