蜀军失利
建安二十二年(217年),刘备派遣张飞、马超、雷铜、吴兰等人攻打下辩,
曹操派遣曹洪、曹休、曹真抵挡。
建安二十三年(218年),张飞屯兵固山,做出要截断曹洪后方的样子,但被曹休识破。曹洪在曹休的建议下,趁蜀军兵力尚未集结之时袭击吴兰,雷铜、吴兰等战死,马超、张飞于是退走。
刘备又派遣将领陈式去攻打马鸣阁道,打算断绝汉中与许都的联系,但被徐晃击败,死伤甚多。
七月,刘备亲自率军停留在阳平关,与夏侯渊、张郃相拒。
曹操在许都治兵,准备救援汉中。九月,曹操率军抵达长安。
曹军失利
建安二十四年(219年),刘备从阳平关,南渡沔水,于定军山扎营,夏侯渊率军来抢定军山。
刘备派军趁夜火烧夏侯渊军队的外围鹿角。夏侯渊派张郃守东围鹿角,自己率兵守南围鹿角。刘备调一万多兵马分为十部,猛攻张郃,张郃亲身搏战,刘备一时难以攻克。夏侯渊分兵去救援张郃。刘备派黄忠攻打南围鹿角。此时的南围鹿角,夏侯渊正在率领400曹军精兵修复鹿角,黄忠乘着地势高,鼓噪大喊,一战就将夏侯渊斩杀在南围鹿角。黄忠又趁机攻向十五里之外的夏侯渊军营,夏侯渊军队因为丧失了主帅而迅速溃败。益州刺史赵颙等,也被黄忠军斩杀。黄忠因此升迁为征西将军。
夏侯渊战死后,汉中曹军惶恐不安,司马郭淮、督军杜袭等推举荡寇将军张郃暂时统领汉中诸军,以安众心。张郃率军驻守阳平关。
曹刘对峙
刘备军在攻克夏侯渊后,打算渡汉水来攻郭淮,郭淮部下见己方兵力过少,难以匹敌,建议郭淮可依汉水结阵。但郭淮却认为这是示弱,应该远离汉水结阵,趁刘备军半渡时袭击。但刘备见到郭淮的结阵方式,没有渡水。
三月,曹操率领大军抵达汉中地界,进驻阳平关。
刘备踌躇满志,说即使曹操亲自前来,也不能改变什么,自己一定会拥有汉中。刘备在山上扎营,占据险要,固守不战,与曹操对持。
僵局打破
曹操来争汉中,将数千万囊粮草搬运到北山囤积。
刘备派人到成都让诸葛亮调兵来支援,杨洪以汉中是益州咽喉,家门之祸、存亡之机,劝谏诸葛亮在这种时候应该“男子当战,女子当运”。
时任征西将军的黄忠在赵云营内。黄忠见曹操运送了这么多的粮草,于是建议赵云可以去劫取。但曹操的囤粮重地,应该是有重兵把守,为谨慎起见,赵云与黄忠约定期限,然后再让黄忠领兵去劫粮。黄忠逾期未归,赵云率领轻骑前往接应,正与曹军相遇,曹军紧追不舍,直到赵云营前,赵云大开营门,偃旗息鼓,曹军怀疑赵云设有伏兵,引军退走,赵云趁机反击,曹军惊骇,自相践踏,死伤极多。 (详见汉水之战)
后来,刘备开始主动出击,派副军中郎将刘封于阳平关前叫阵,曹操大骂刘备常派义子出战,称自己可用黄须儿
曹彰来与刘封一战。曹操于是派人去召北中郎将曹彰来援汉中。
五月,曹彰日夜兼程,赶至长安。但曹操已经开始撤离,从汉中回师长安。
汉中之战以
刘备的胜利而结束。秋七月,刘备称汉中王。