曹操让汉帝下诏书,要求益州牧刘璋出兵讨伐张鲁,不管刘璋是否领命,至少在南面给张鲁制造压力。同时下诏书给田靖,命令田靖领本部人马南下进兵汉阳郡,与曹军在汉阳郡汇合。
曹操大军到了长安,夏侯渊早已经做好了出征的准备。曹操以夏侯渊为先锋,领兵三万,发兵凉州,曹操帅十万大军随后。
夏侯渊一路西进,羌人氐人望风而逃。夏侯渊接连收复了多处失地,士气大增,所以难免有了轻视马超的心思。夏侯渊不等曹操大军跟上,就率先进军冀县,结果在射虎谷中了马超的埋伏。三万大军折损二万余,夏侯渊只得领着几千残兵败退。
曹操重责了夏侯渊,让夏侯渊押运粮草。重新以张郃为先锋,领兵两万,当先开路,自领大军随后。
张郃吸取了夏侯渊的教训,一路谨慎小心,凡遇到可埋伏的地形,往往放火烧山。他可没把凉州当自己的地方,反正大火过后,没有了牧草,那是羌人和氐人需要担心的事情,他的目标只有一个就是打败马超。
马超看到张郃防御严谨,根本没有可乘之机,所以干脆放他进来,在冀县城下迎敌。
等张郃到了城下,马超拍马出阵,哪知道张郃根本不与他斗将,而是列出整齐的军阵迎敌。马超麾下多骑兵,本来西凉骑兵对步兵是由很大优势的。但是张郃似乎早有准备,阵前遍布陷马坑,第一排大盾,第二排长矛手错身支起长矛,后面如法又安排了两排大盾和长矛手,弓弩手在后实施箭雨覆盖。
马超的骑兵在一轮冲锋时候,死伤过半而没有建功,没有办法马超只好鸣金收兵。张郃与马超相持数日,马超连番攻打没有效果,这时曹操的八万大军却到了。曹操与张郃领兵将冀县围了一个水泄不通。
马超之前占领冀县,并没有太多反抗。但是当初杀了凉州刺史韦康,本就不得人心,如今曹操大军兵临城下,城中的氛围一下微妙了起来。
曹操围城十日时候,马超麾下兵马几乎全部上城墙轮值过,如今士卒死伤过半,就是没有受伤的连日守城,也是身心疲惫,最糟糕的是也没有有后备兵员。对马超来说,为今之
计只有突围,然后去汉中找张鲁借兵。
但是马超突围却只准备带走骑兵,那些步兵和之前的降将,他是准备让其坚守冀州为自己拖延时间的。可惜,马超原本秘密的撤退命令,却提前被外泄了。原冀县降将杨阜、姜叙、姜隐、赵昂、尹奉、姚琼、孔信等便趁夜召集旧部,打开冀县城门,迎曹操大军进城。
马超得到曹军进城的消息,知道大势已去,立刻带着庞德和杨昂带领不到五千人的骑兵队伍,从西门突围而出。