公元215年,曹操举兵攻打占据汉中的张鲁,由于曹军来势凶猛,张鲁势力难以抵抗,没多久就被曹军消灭,张鲁的几个部将战死了,他自己则投降了曹操。与此同时,孙权正在向刘备要回之前借出去的荆州,刘备不肯把荆州退给孙权,两个人因为这件事闹了很大的矛盾,只差没有上战场拼个你死我活了。然而张鲁投降的消息传来后,刘备和孙权不由得都对曹操产生了畏惧心理,与其现在和对方为了一块地盘争来争去,还不如先联合起来共同对抗曹操。两人达成共识后,刘备便带着手下人回到了蜀地。
谋士司马懿和刘晔劝谏曹操趁着刘备的势力还不算强大的时候,把蜀地攻占下来,曹操拒绝了,他说:“人活一世应该知足,只有知足才能常乐,我既然已经得到了汉中,就不该再去侵占蜀地。”之后,曹操让徐晃、张郃和夏侯渊驻守汉中,任命丞相长史杜袭为驸马都尉,负责汉中地方事务。
曹操虽然对外宣称不想攻占蜀地,但刘备不相信他的话,回去后便开始加强警戒,命令军队刻苦操练。果然,汉中的曹军发动了几次小规模的进攻,多亏刘备有所防范,才没有让蜀地陷入危险之中。
时间到了公元217年,刘备等人眼看着曹军就在自己身边晃荡,保不准哪一天就朝自己冲过来了,虽说前几次都把他们打回去了,可谁知道曹操会不会再派大部队过来呢?蜀地每个人都很不安,法正看到刘备焦虑的样子,便建议刘备进攻汉中,法正认为曹操集团内部肯定发生了些事情,导致曹操没有在夺得汉中后立刻对蜀地发起攻势。而且夏侯渊和张郃算不上一等一的猛将,只要多带些人马,肯定能把汉中攻克下来。法正又对刘备说,汉中的地理位置十分重要,得到它,我们就对曹操造成了威胁,自己的实力也得以增强,还可以把周围的雍州和凉州攻占下来,扩充势力范围。这番话说得刘备动了心,稍微思考了下,刘备便下达了攻占汉中的命令。
在谋士黄权的建议下,法正、黄忠、魏延、赵云、高翔等几位将领带着蜀军从成都出发,先是攻占了巴东郡,然后攻占巴西郡,接着大军朝汉中的陽平关前进。张飞、马超、吴兰、雷铜等人则带着另一批大军攻打武都郡,顺利攻城后把军队驻扎在下辨。刘备进攻汉中的消息传出去后,很多人带着自己的部队前来投靠,使得刘备的军力在短时间内得到巨大的增加。
曹操听闻刘备即将进攻汉中,连忙命令夏侯渊带着主力部队赶去陽平关迎战刘备,张郃则驻守广石,徐晃驻守马鸣阁,负责马鸣阁和陽平关中间这段路的情况,曹洪、曹真则率领着剩下的兵力围截张飞,给大部队争取作战时间。
两军交战一年,没有分出胜负。张飞和马超的军队联合起来驻守在固山,并对外宣言要从曹军后部包围上来,切断曹军退路。曹洪和一部分人得到蜀军的动向后,打算趁张飞和马超合兵之前,先去攻打下辨的吴兰,但曹休对蜀军的意图表示怀疑,他认为,蜀军如果真想切断曹军后路,肯定会悄无声息地包围过来,绝不可能让自己的计划被外人知晓。曹休建议放弃攻打下辨,直接攻打蜀军,才是最正确的选择。曹洪不听,仍然坚持自己的主张,吴兰军队差不多全军覆没,吴兰在混乱中也被杀死。张飞、马超听到下辨失守的消息后,带着军队离开了固山,转投其他地方。
另一边,刘备对战夏侯渊。最开始,部将陈式授命进攻马鸣阁,不幸被徐晃打败,大军损失惨重。刘备慌了神,集结最强的兵力去攻打驻守在广石的张郃部队,费了九牛二虎之力也没能消灭张郃,眼看胜利无望,刘备不甘心,写了一封救援信给诸葛亮。诸葛亮急忙带兵赶来增援,蜀军得以继续和曹军对峙。蜀地久攻不下,曹操也急了,亲自到长安督战,但战事一直没有明朗的进展。公元219年,刘备孤注一掷,八大部队驻扎在定军山。定军山山势险要,地理条件不利于作战,虽然会给蜀军带来一些麻烦,但也让曹军难以进攻。刘备驻军后,夏侯渊和张郃随即带领大军来到走马谷,和蜀军相持不下。谋士黄权向刘备提议趁夜偷袭曹军,先用大火引燃曹军军营,然后趁他们混乱的时候猛然出击,刘备依计行事,火烧曹营。曹军士兵果然慌乱不已,夏侯渊和张郃好不容易才把混乱的场面平复下去,两人各带一队兵力,夏侯渊看守南边,张郃看守北边。刘备命人从北面攻击,张郃抵挡不住,夏侯渊又把自己的兵力拨了一半给他。这么折腾一番后,曹军的精力也消耗了不少,刘备、法正等人在远处观战,看到此时情景,法正示意可以全力进攻,刘备一挥手,鼓手们便轰隆隆开始擂鼓。蜀军士气在鼓声中大振,呐喊着冲进曹营,曹军措手不及,被蜀军砍死砍伤无数。夏侯渊和几名部将被斩,张郃则带着残兵逃了出来,连夜跑到位于汉水的曹军北下营。
夏侯渊死后,张郃担任统领,处于混乱中的曹军总算安稳下来。刘备虽然打了一场胜仗,但仍然不敢掉以轻心,虽然和曹军只有一水相隔,碍于实力悬殊,刘备决定在汉水边设立防线。张郃几次想引诱刘备过河,可是刘备心有疑惑,都没有成功。曹军只好回到陽平关等待援军。没几日,曹真带着曹操的命令前来增援,和徐晃一起作战,击败了前来进攻的蜀军,总算挽回了一部分损失。
曹军几次失利,曹操坐不住了,直接从长安来到汉中前线。刘备对曹操的到来一点儿也不担心,在他看来,拿下汉中不过是时间问题,而且也不会等很久。手下人见刘备如此镇定,也都把自己的担忧放了下去,刘备吩咐大家加强戒备,派兵把守重要的关口,其他的什么也不用做。
曹操原以为刘备会按捺不住先发动进攻,谁知等了很久也没见蜀军有什么动静,想不通刘备究竟是何打算。有一天,一队曹军外出运粮,蜀军部将黄忠乘机把粮草夺了过来。可是刘备左等右等,一直不见黄忠回来,赵云便主动请命去寻找。赵云带着几十名骑兵,才一出军营,就被曹操的大部队包围了,原来黄忠已经被曹军俘虏,曹操就等着刘备派人出营搜寻黄忠,好把蜀军部将一个个消灭。赵云带的人手不多,只好一边打一边朝军营退去。到了蜀军军营门口,赵云命令全部士兵出来应战,四周鼓声雷雷,曹军吓得不敢动弹,蜀军乘机放箭,曹军躲闪不及,中箭落水者无数。眼看情况已经对自己不利,曹军只能狼狈跑了回去。
时间一晃又是几个月过去了,刘备和曹操虽时有交战,但都无法完全取得胜利,曹操想来想去,觉得汉中并不是非要得到不可,于是决定撤离汉中。他用“鸡肋”作为撤军的口令,大家都不明白这是什么意思,只有杨修懂得其中的含义。鸡肋可有可无,丢掉了虽然可惜,但吃起来没滋没味,比不上鸡身上其他部位的肉。经过杨修的解释,众人才算明白过来,经过一段时间的整理后,曹操便带着大军离开了汉中。
刘备终于得到了汉中,为了彻底清除残余敌对势力,刘备派人杀死了驻守房陵的太守蒯祺和驻守在上庸的太守申耽,随后,刘备在汉中称王,正式宣布和曹操对抗。