建安二十年(215年),曹操亲率10万大军入关中至陈仓(宝鸡东),打算自武都(今甘肃武都)穿越氐人居住区。氐人恃险不服,塞道抗据。曹操派遣猛将张合、朱灵为先锋开路。张合锐不可挡。四月,曹操出散关(宝鸡西南)至河池(甘肃徽县西北),攻屠氐王窦茂及下属万人,收其麦以补军食。七月,曹操大军进抵阳平关。阳平关地处勉县西白马河入汉水处,川、陕交通要冲,形势险要。
在强敌压境的形势下,张鲁自度不能对抗,打算投降。但他的弟弟张卫不甘心束手就擒,便与大将杨昂率数万五斗米道军士横山筑城10余里,死守阳平关。曹军开始进攻不得手,曹操下令假装撤退,乘张卫守备松懈,再密令高祚、解剽等将发动夜袭,突破天险阳平关,击溃五斗米道军主力。张卫潜逃。
张鲁闻讯,准备出降,但属下阎闻建议:“现在兵败危急,如果被迫投降,其功太轻,不如权且退入巴中,依附土著,然后送质子归附曹操,其功必多。”于是张鲁率残部放弃南郑(南郑县东),逃进南山巴中。临走时,部下要烧毁多年积蓄下来的府库珍宝,但张鲁不许,说:“本来要归顺朝廷,又不便马上投降,现在退走,是为了避其锋锐,并非存有敌意。宝货仓库,是属于国家的。”他下令封藏,谁也不许动。曹操到达南郑,听说此事,非常赞赏张鲁的为人,派人慰抚张鲁,劝他投降。
此时,刘备刚刚袭取成都,代刘璋做了益州牧,但他立足未稳,还无力争夺汉中。黄权献策:“若失汉中,则三巴不振,这等于割掉蜀国的股臂。”刘备便委任黄权为护军,率诸将领前往巴中迎请张鲁入蜀。
张鲁在北降归曹与西结刘备之间权衡了一番,说:“宁为曹公作奴,不为刘备上客。”于是在十一月委质降曹。曹操大喜,极尽礼遇,拜张鲁为镇南将军,封阆中侯,食邑万户,其子5人也都封为列侯。曹操还与张鲁结为儿女亲家,以示宠络。先前反曹兵败投靠张鲁的关中实力派程银、侯选、刘雄鸣诸将,也随张鲁降曹,全都得到曹操重用,官复原职。
此外,在张鲁投降之前,巴郡土著巴夷和贵人首领朴胡、杜濩、任约已归附曹操,分别被委任为太守。
至此,张鲁的独立王国寿终正寝。汉中及巴中全部归曹操控制。曹操恢复汉宁郡为汉中郡,再分汉中的安阳、西城为西城郡,分汉中的锡、上庸为上庸郡,分置太守和都尉。