曹操興兵西征,將兵力分為三個部分:前部由夏侯淵和張合擔任先鋒;曹操自己統領眾將領坐鎮中軍;後部則由曹仁和夏侯惇負責押運糧草。很快有細作將訊息傳入漢中。
張魯與其弟張衛商討如何應對敵軍。張衛建議:“漢中地勢最為險要的地方非陽平關莫屬。我們可以在關隘左右,依山勢和林地佈下十多個營寨來迎戰曹軍。兄長您在漢寧坐鎮,多調撥些糧草以備不時之需。”張魯採納了這個建議,隨即派遣大將楊昂和楊任與其弟張衛即刻啟程。
軍隊到達陽平關後迅速安營紮寨,夏侯淵和張合的前鋒軍也緊隨其後抵達。當他們得知陽平關已有防備時,便在離關十五里的地方紮營。當晚,由於行軍勞累士兵們都已疲憊不堪,紛紛歇息下來。
然而就在深夜時分,突然寨後火光沖天而起,楊昂和楊任兩路兵馬殺來劫營。夏侯淵和張合匆忙上馬迎戰,但四面八方湧入的敵軍讓他們陷入了困境,曹軍大敗逃回並向曹操報告了戰況。
曹操憤怒地責備夏侯淵和張合說:“你們兩人都是行軍多年的老將了,怎會不知‘長途行軍士兵疲憊時應防範劫營’的道理?為何不提前做好準備?”他本欲斬此二人以嚴明軍紀,但在其他將領的求情下最終作罷。
第二天曹操親自率兵擔任前鋒去探索地形,在看到山勢險峻、林木茂密的複雜地形後擔心有埋伏,便決定退回營寨。他對許褚和徐晃兩位將領說:“如果我早知道這裡地勢如此險惡就不會輕易起兵前來了。”但許褚鼓勵他說:“既然已經來到這裡,主公您就不能懼怕辛苦。”
第二天曹操騎上馬只帶著許褚和徐晃兩人去察看張衛的營寨佈局。當他們轉過一個山坡時遠遠地望見了張衛的營寨。曹操正揮鞭指著營寨對兩位將領評價其堅固程度時,突然從背後傳來一聲吶喊箭矢如雨點般射來。楊昂和楊任分兩路殺了過來。
曹操大驚失色之際許褚大喊道:“我來抵擋敵將!徐公明你要保護好主公!”說完提刀躍馬衝向前去與楊昂和楊任交戰。楊昂和楊任無法抵擋許褚的勇猛紛紛敗退而去其餘士兵也不敢再上前。徐晃則保護著曹操逃過了山坡與前來接應的夏侯淵和張合會合成功擊退了敵軍救回了曹操並安全返回了營寨。
戰後曹操對四位將領進行了重賞。自此之後兩軍對峙了五十多天都未曾交戰。一天曹操下令撤軍賈詡問其原因他說:“我估計敵軍每天都在嚴陣以待我們難以迅速取勝。所以我打算以撤軍為名讓敵人放鬆警惕然後再派遣輕騎兵抄襲他們的後路這樣必定能夠戰勝他們。”賈詡稱讚道:“丞相真是神機妙算啊!”
於是曹操命令夏侯淵和張合各自率領三千輕騎兵分兵兩路從小路抄襲陽平關的敵軍後方同時他自己則帶領大軍拔營起寨作勢撤退。楊昂得知曹軍撤退的訊息後請求與楊任商議想要乘勝追擊但楊任謹慎地說:“曹操詭計多端我們不知道他的真實意圖所以不能輕易追擊。”然而楊昂卻堅持要追擊說:“如果你不願意去那我就自己去!”楊任苦勸無果。
最終楊昂帶著五寨的全部軍馬前去追擊只留下少量士兵守寨。然而當天大霧瀰漫視線極差楊昂的軍隊在半路上迷失了方向無法繼續前行只得暫時駐紮下來。
另一方面夏侯淵的一路兵馬在抄過山後發現大霧瀰漫且聽到人喊馬叫的聲音擔心有埋伏於是加快行軍速度卻誤打誤撞地走到了楊昂的空寨前。守寨計程車兵聽到馬蹄聲誤以為是楊昂的軍隊回來了便開門讓他們進入。結果曹軍一擁而入發現是空寨後便放火焚燒了營寨。五寨計程車兵看到火光四起都紛紛棄寨而逃。
等到大霧散去楊任率領援軍趕來救援與夏侯淵交戰不久張合的兵馬也趕到了現場。楊任殺出一條大路逃回了南鄭而楊昂想要回撤時卻發現自己的營寨已經被夏侯淵和張合佔領而曹操的大軍也緊隨其後趕