建安六年(201)四月,曹公在黃河岸邊顯示兵力,攻打袁紹在倉亭的駐軍,擊敗了袁軍。袁紹逃往冀州後,又收羅打散的士兵,攻占、平定了那些叛變的郡縣。九月,曹公回到許都。袁紹未敗之時,派劉備攻占汝南郡,汝南的賊寇共都等人都歸附劉備。曹公派蔡揚攻打共都,戰鬥失利,被共都所敗。曹公南征劉備。劉備聽說曹公親自領兵征討自己,便逃奔劉表,共都等人也四散逃命去了。
建安七年(202)正月,曹公駐軍譙縣,下令說:“我舉義旗,招兵馬,是為了鏟除天下暴亂。可是我的鄉人都要死光了,我在境內走了一天,沒有看見一個熟識之人,這種情形真叫我悲傷。自從我起兵以來,將士們凡是犧牲了沒有後代的,讓他的親戚過繼作為他的後嗣,官府分給他們田地,配給耕牛,設置學校,派專人教育他們,給他們修建宗廟,使他們能夠祭祀自己的祖先,如果皇天有靈,我死也沒有什麼後悔的了!”從這裏又到了浚儀縣,治理好睢陽渠,又派使者用牛、羊、豬三牲的祭品去祭祀已故太尉橋玄。然後,又進軍官渡。袁紹自從部隊被擊潰以後,得病吐血,五月就死了。他的小兒子袁尚接替了他的職位,袁譚自封為車騎將軍,駐守黎陽。這年九月,曹公征討他們,連打幾仗,袁氏兄弟屢戰屢敗,退回城中死守。
建安八年(203)三月,曹公攻打黎陽城外城,袁氏兄弟出戰,曹軍奮勇衝擊,大敗袁軍,袁譚、袁尚連夜逃走。四月,曹公進軍鄴城。五月回許都,留賈信駐守黎陽。五月二十日,曹公下令說:“兵書《司馬法》上規定:‘將軍臨陣脫逃要處以死刑’,所以有趙括的母親請求不因兒子兵敗被連坐一說。可我調兵遣將,領兵征戰,隻獎有功之人,而不罰有過之人,這不是國家的法律。現在公布命令:以後眾將出征,打敗仗的要依法治罪,作戰失敗的要免去爵位。”七月,曹公又頒布政令:“自戰亂以來,已有十五年了,年青人沒見過仁義禮讓的風尚,我為此非常擔憂。現公布法令:從今以後,各郡國要提倡和研究儒家經典,有五百戶的縣就要設置學校,選拔當地優秀學生入校,這樣或許可以使聖賢的思想不致廢棄,有利於天下。”八月,曹公征討劉表,駐軍西平縣。先前曹公離開鄴城南下時,袁譚、袁尚為爭奪冀州而交戰,袁譚被袁尚打敗,逃到平原縣固守。袁尚攻城很急,袁譚派辛毗到曹公處投降,請求救兵。眾將都存有疑慮,荀攸勸說曹公答應下來,於是曹公帶兵返回。十月,曹公到了黎陽,讓兒子曹整娶袁譚的女兒為妻。袁尚聽到曹公北返的消息,撤走了平原的圍兵,回到鄴城。東平縣的呂曠、呂翔叛離袁尚,駐軍陽平縣,帶著自己的部隊投降了曹公,被封為列侯。
建安九年(204)正月,曹公率兵渡過黃河,截斷淇水,引入白溝,作為運糧的通道。二月,袁尚又攻打袁譚,隻留下蘇由、審配守衛鄴城。曹公率兵到了洹水,蘇由投降。一到鄴城就發動攻擊,堆起土山,挖掘地道。武安縣令尹楷駐守一毛一城,保護通往上一黨一的糧道暢通。四月,曹公留下曹洪攻打鄴城,自己帶兵攻打尹楷,打敗後又回師鄴城。袁尚的部將沮鵠守衛邯鄲縣,被曹軍攻克。易陽縣縣令韓範、涉縣縣長梁岐獻城投降,賜給他們關內侯的封爵。五月,曹軍毀去土山和地道,繞鄴城挖了一圈大壕溝,挖開漳水河淹灌鄴城;城中的人餓死了一大半。七月,袁尚回兵救鄴城,眾將都認為:“這是回返駐地的部隊,人人都會奮力作戰,不如避開他們。”曹公說:“袁尚如果從大道上返回,避讓;如果沿著西山而來,這次就會被捉住。”袁尚果然沿著西山前來,靠著滏水河紮下營寨。半夜裏派兵偷襲圍城的曹軍。曹公迎戰袁軍,大敗袁軍,並下令乘勝包圍他們的營寨。還沒等到合圍,袁尚就害怕了,派原來的豫州刺史陰夔和陳琳求降。曹公沒有答應,加緊圍攻。袁尚連夜逃走,退守祁山,曹軍追擊不止。袁將馬延、張靑等人臨陣投降,袁軍瓦解,袁尚逃往中山國。曹軍繳獲了袁軍全部輜重物資,還得到了袁尚的印章、綬帶、符節、斧鉞,又讓袁軍降兵舉著這些東西給他們城中家屬看,城中人心慌亂。