建安二十三年七月曹操就已经出兵西征刘备了,当时刘备和夏侯渊还正在阳平关对峙。曹操大军要是能及时赶到,不仅能保住夏侯渊性命,说不定能就此打败刘备,保住汉中。可惜曹操九月到达长安后,停了下来,没有继续前进。
当时曹操后方接连发生两件大事。先是北方代郡、上谷等地方的乌丸无臣氐反。曹操于是令儿子曹彰为北中郎将,行骁骑将军,带兵前去征讨。曹操的几个儿子都非常有才华,既有曹冲那样的少年天才,也有才高八斗的曹植,还有建安八子之一的曹丕。而这个曹彰稍稍有些另类,小时候就喜欢格斗射箭,膂力过人,却不喜欢诗词歌赋,一心只想做大将。此次北方有乱,曹彰首次率兵出征,曹操未免有些担心。
另外一方面,建安二十三年十月荆州前线的南阳郡发生了叛乱。守将侯音聚集了数千人,抓住了南阳郡的太守东里箧,打算向南投降关羽。曹操于是令樊城的守将曹仁带兵镇压。直到二十四年正月,曹仁才破城,攻杀了侯音。
等到这些事情都处理好了,前线已经传来夏侯渊的死讯了。二十四年三月曹军才从长安出发,向汉中进发。面对曹军,刘备信心十足,预先断言:“曹公虽来,无能为也,我必有汉川矣。”事实也确实如此,刘备当时已占据了汉中的险要关口,并采取只守不攻的战略。当初强大的曹军面对张鲁一万多的守军都险些失败,可知汉中地理环境非常复杂,易守难攻。现在面对比张鲁英雄十倍、百倍的刘备,曹军困境可想而知。
期间有数次较小的交锋。有一次蜀军发现曹军在运送很多兵粮,黄忠便带部队前去抢粮,然而过了很长时间黄忠都没有回来,于是赵云便带了十几个骑兵前去寻找。路上遇到了曹军,赵云才和前锋接战不久,大队的曹军主力都围上来了,赵云杀出重围,且战且退,途中将领张著受伤,赵云又回头营救。曹军追击到蜀军营地,张翼建议赵云关上营门防守,赵云却令大开营门,曹军怕里边有伏兵,不敢入内缓缓撤去。于是赵云率军趁势追击,用箭射击曹军后方,曹军大乱,自相践踏,死了不少人,又有很多淹死在了汉水中。
面对刘备的龟缩战略,曹操也没有什么好办法,时间长了部队伤亡不断增加、士气低落,后勤补给线也拖得很长。而且刘备据险防守,简直就没有能够攻克的希望,于是曹操在综合考虑利弊之后,决定退军。
有道是:“机不可失、失不再来”。自建安十六年来,曹操西征关中马超、韩遂,屠宋建,平羌氐,降张鲁,运筹帷幄,拓地千里。然而整个过程中曹操也有几次失误,白白浪费了几次良机,建安二十年张鲁投降后,大军本可以就势南下攻占蜀地,然而曹操却着急回都封公称王了,把大好机会留给了刘备。建安二十三年大军九月到达长安,本应尽快进入汉中支援夏侯渊,然而曹操却在长安一待就是半年,结果“白地将军”夏侯渊授首,汉中被夺。如今面对占尽地利、人和的蜀军,曹操回天乏力,也只能望蜀兴叹了。