初平四年(193)春天,在去年年底刚编组完成的曹操军队,面对着关东军团的主力之一——袁术部队的严厉挑战。
平定兖州后,曹操将他的直属军队驻在甄城(今山东省濮阳县东)。这个时候,关东军团南北对抗的情形发生重大变化。荆州刺史刘表对袁术驻在其州郡东北境界的部队施加压力,并断绝其财源军需,袁术不得已之下,乃转往兖州发展,而侵入曹操的地盘。
袁术将主力部队驻屯在封丘城,并联系被曹操击败的黑山党残余部队及匈奴的于夫罗众,打算由西方夹击曹操。
部署完成后,袁术派遣部将刘详,率领先锋部队向曹操直属部队的驻屯地甄城进逼,摆出一副挑战的姿势。但刘详对曹操的作战能力颇感恐惧,到达濮水南岸的匡亭(古代的治安驿马站),便扎营不敢前进了。
曹操接获情报人员送来的资料,判断袁术军队准备分三方面向甄城夹击,其目的无非想运用气势,逼迫兖州其余郡县部队不去帮助曹操,以达到孤立曹军的目的。
但眼疾手快的曹操,很快看出袁术布局上的弱点,刘详的先头部队虽摆出诱战姿态,但选择匡亭却是一项严重错误。
匡亭距离袁术主力军的陈留,的确比从甄城到匡亭约少一天的步兵行程。但曹军行进路线只需渡过濮水,便可直接攻击匡亭;而陈留的袁军却需连渡汴水、南济河、北济河才到得了匡亭。以当时的行军方式,渡河是件非常麻烦的工作,如果曹军全力加速行军,绝对比袁术的后头主力部队更早到达匡亭。黑山党及于夫罗众的部队更远,等他们赶到,大概战争早已结束。
曹操决定发动奇袭。他派荀彧在甄城集结兖州各州郡军队,让袁术误以为曹军仍在编组以准备进行大规模会战,自己则率领直属部队,迅速渡过濮水,以迅雷不及掩耳之势突击匡亭的袁军先锋部队。
正在等候进一步指示的刘详,面对突然出现在眼前的曹操,惊慌失措之下很快便被歼灭了。迅速清理战场后,曹操在匡亭布阵,准备等待袁术本部主力军队到来,另外荀或也集结兖州的大多数部队,由曹仁率领赶赴匡亭驰援。
袁术判断曹军的主力是在曹仁的部队中,根本不相信曹操本人已在匡亭。因此,他带领着本部军队慢慢渡过四条河流,准备和曹军主力一决生死。他认为占领匡亭的只是曹军先头部队而已,由于人数相差悬殊,曹军势必等主力到达后才会发动攻击。
曹操早已看穿袁术心思,当大部分的袁术部队渡过北济河,尚未摆好阵势时,曹操便迅速发动奇袭。袁术军在人数上虽远超过曹操,但在发现自己犯了严重错误时,袁术早已无心恋战,便下令军队往西撤退到乌泽旁的封丘城,重行部署作战防线。想不到人数较少的曹操军却毫不放松地继续追击,进而包围封丘城。
完全丧失信心的袁术,根本无法判断曹军到底有多少人,听到曹军紧追不舍,迫近封丘城时,他又立刻放弃阵地,一口气向东南撤退了一百五十余里,渡过南济水、汴水、睢水到达襄邑。
没想到气还没有喘过来,疾如风的曹军又追踪而至,袁术吓破了胆,连忙跑入附近的太寿城,高挂起免战牌。
由于仓促撤军,后面又有敌军追踪,连续两百多里路的逃亡,大部分的袁军早已半途溃散了。到达太寿城的残余部队三分之一都不到。相反,追击的曹军,却已与曹仁的兖州军团会合,在人数上反而取得绝对优势。
太寿城城墙坚固,攻击不易,袁术本来以为已暂时安全,不料太寿城傍临睢水,地势较低,时值春末,上游雪水融化,河流暴涨,曹操便派人截断上游的睢水,摆出一副决堤灌城的态势。袁术眼见不妙,乃率领少数亲信渡水,逃入地势较高的宁陵城。但曹操紧追不舍,也跟着渡河,并准备全面包抄。袁术到此才完全绝念,只好再度弃城而逃。
这一次,袁术不敢心存侥幸,他不但逃出兖州地界,并且越过亲附自己的豫州,直入老巢扬州。他被曹军的追击速度吓坏了,丝毫不考虑地渡过长江,到达九江城,才稳住三魂七魄,保住性命。
由匡亭退到封丘,再逃往襄邑、太寿、宁陵,最后直入九江城,袁术这次大撤退全程六百多里路,真是惶惶如丧家之犬。南方关东军团领袖竟被刚组成的曹操军队打得如此惨败,大家不得不对曹操另眼相看了。
由于全军火速追赶,有一次几乎一天一夜滴水不沾,那一天全程均无水源,又不能停下来凿井,时逢春末夏初,天气转热,全军几乎都快渴死了,行军速度也越来越慢。曹操亲自在前头打气,但没有水到底难以忍受。
曹操灵机一动,扬起马鞭,遥指前方,大声喊道:“儿郎们,前面便是一片梅林了,上面结满酸溜溜的梅子,大家再忍耐一会儿吧!”听说有梅子,全军欢声雷动,一时间个个口舌生津,精神大振,口渴也解决了。
这场战争由冬末打到夏秋,曹军在做好换季工作后,便又兴奋又疲惫地班师回营,屯驻在定陶城(今山东省定陶县)。