建安元年春正月,曹操率军抵达武平,袁术任命的陈相袁嗣见曹操势大,自知不敌,便出城投降。
曹操打算迎接汉献帝,以此来号令天下。然而,他的想法却遭到了一些将领的质疑。关键时刻,荀彧和程昱极力劝说曹操,分析了迎接汉献帝的诸多好处。曹操听取了他们的建议,派遣曹洪率领军队向西迎接汉献帝。但卫将军董承与袁术的部将苌奴据守险要地势,阻挡曹军,曹洪的军队无法前进。
汝南、颍川一带的黄巾军何仪、刘辟、黄邵、何曼等人,各自拥兵数万。他们起初依附袁术,后来又投靠孙坚。二月,曹操进军讨伐,凭借着卓越的军事才能,大破黄巾军,斩杀了刘辟、黄邵等人。何仪见大势已去,便率领部下投降。
汉献帝为表彰曹操的功绩,封他为建德将军。到了夏天六月,曹操又被升迁为镇东将军,并被封为费亭侯。
秋七月,杨奉、韩暹护送汉献帝返回洛阳。据《献帝春秋》记载,汉献帝刚到洛阳时,暂住在城西原中常侍赵忠的宅子里。汉献帝命令张杨修缮宫室,并将其中一座宫殿命名为扬安殿。八月,汉献帝才迁居到修缮好的宫殿中。杨奉则率军在梁地屯驻。曹操得知汉献帝回到洛阳后,立即率军赶到洛阳,负责保卫京都的安全。韩暹见曹操到来,心中害怕,便弃城逃走。汉献帝授予曹操节钺,让他总领尚书事务。据《献帝纪》记载,曹操还兼任司隶校尉。
此时的洛阳,历经战乱,早已破败不堪。董昭等人劝说曹操将都城迁往许县。九月,汉献帝的车驾从轘辕关向东进发,曹操被任命为大将军,封武平侯。自汉献帝西迁以来,朝廷日益混乱,直到此时,宗庙社稷的各项制度才得以重新建立。据《张璠汉纪》记载,当初汉献帝在曹阳战败后,打算乘船沿黄河东下。侍中、太史令王立进谏说:“去年春天,太白星在牛斗星宿附近侵犯镇星,又经过天津星宿,如今荧惑星又逆行,镇守北河,此时不宜北渡黄河。”因此,汉献帝放弃了北渡黄河的计划,打算从轵关东出。王立又对宗正刘艾说:“之前太白星镇守天关,与荧惑星会合,金火交会,这是改朝换代的征兆。汉朝的国运已经走到尽头,晋、魏必将兴起。”后来,王立多次对汉献帝说:“天命有更替,五行不会永远昌盛,取代火德的是土德,继承汉朝的是魏,能够安定天下的,是曹姓之人,陛下只需倚重曹氏即可。”曹操得知此事后,派人告诉王立:“我知道您对朝廷忠心耿耿,但天道幽深难测,希望您不要再过多谈论此事。”
汉献帝东迁洛阳之时,杨奉企图从梁地出兵拦截,但未能成功。建安元年冬十月,曹操决定征讨杨奉。杨奉得知曹操来攻,心中畏惧,急忙向南投奔袁术。曹操乘胜追击,攻打杨奉在梁地的屯营,并一举攻克。
此时,朝廷任命袁绍为太尉。袁绍认为太尉的职位在曹操担任的大将军之下,感到十分耻辱,拒不接受任命。曹操见状,便坚决辞去大将军一职,将其让给袁绍。于是,汉献帝改封曹操为司空,代理车骑将军。
同年,曹操采纳枣祗、韩浩等人的建议,开始推行屯田制。自天下大乱以来,粮食匮乏成为困扰各方势力的难题。众多军队兴起,却都没有长远的粮食储备计划,饥饿时就四处掠夺,吃饱后便丢弃剩余粮食,不少军队因缺粮而自行瓦解、流离失所,不战自败的例子数不胜数。袁绍在河北时,他的士兵只能靠吃桑椹维持生计;袁术在江、淮地区,军队则以蒲蠃为食。百姓更是苦不堪言,甚至出现人吃人的悲惨景象,各州郡一片萧条。曹操深知,稳定国家的关键在于强大军事力量和充足的粮食储备,他感慨道:“秦朝凭借重视农业而兼并天下,汉武帝通过屯田平定西域,这些都是前人留下的成功范例。”于是,曹操这一年招募百姓在许县附近屯田,收获谷物达百万斛。此后,各州郡纷纷效仿,设置田官,到处都开始储备粮食。这一举措让曹操在四处征战时,无需为运输粮草而劳心费力,为他兼并各路贼寇、平定天下奠定了坚实基础。
吕布趁刘备不备,袭击并夺取了下邳。刘备走投无路,只好前来投奔曹操。程昱见状,向曹操建议道:“刘备有雄才大略,又深得人心,他终究不会屈居人下,不如趁早除掉他。”曹操却说道:“如今正是招揽英雄的时候,若是杀了刘备,会让天下英雄寒心,此事万万不可。”
张济从关中逃到南阳,不久后去世,他的侄子张绣接管了他的部队。建安二年春正月,曹操率军抵达宛城。张绣见曹操势大,便选择投降。然而没过多久,张绣反悔,再次反叛。曹操仓促应战,结果军队战败,他自己也被流矢射中,长子曹昂、侄子曹安民不幸遇害。据《魏书》记载,曹操所骑的马名叫绝影,也被流矢射中,脸颊、足部受伤,曹操的右臂也因此受伤。《世语》则提到,曹昂不会骑马,将自己的马让给曹操,曹操才得以幸免,而曹昂却惨遭杀害。曹操无奈之下,率军退回舞阴。张绣派骑兵前来袭击,曹操整顿军队,奋力反击,成功击破张绣的骑兵。张绣见势不妙,逃往穰城,与刘表合兵一处。曹操对众将说道:“我接受张绣等人投降,却没及时扣押他们的人质,才导致这样的后果。我已经知道失败的原因了。你们看着吧,从今往后,我不会再犯这样的错误。”说完,曹操便率军返回许县。《世语》记载,按照旧制,三公领兵入朝拜见天子时,都要被戟交叉架在脖子上前行。当初,曹操准备征讨张绣时入朝拜见天子,这一制度刚刚恢复。经此一役,曹操从此不再入朝拜见天子。
袁术妄图在淮南称帝,他派人将此事告知吕布。吕布扣押了袁术的使者,并将袁术的书信呈交给曹操。袁术得知后,恼羞成怒,立刻出兵攻打吕布,结果却被吕布打得大败。
建安二年秋九月,袁术侵犯陈地,曹操决定东征袁术。袁术听说曹操亲自率军前来,吓得弃军而逃,只留下部将桥蕤、李丰、梁纲、乐就抵挡。曹操大军一到,迅速击破桥蕤等人,将他们全部斩杀。袁术狼狈地渡过淮河,曹操则率军凯旋,回到许县。
曹操从舞阴返回许县后,南阳、章陵等地的诸多县又背叛曹操,重新归附张绣。曹操派曹洪前去攻打,却出师不利,曹洪只好退兵,屯驻在叶县,还多次遭到张绣和刘表军队的侵扰。同年冬十一月,曹操亲自率军南征,再次抵达宛城。据《魏书》记载,曹操来到淯水河畔,祭祀在战斗中阵亡的将士,他悲痛地流泪叹息,在场的将士们无不被他的真情所感动,纷纷落泪。刘表的部将邓济据守湖阳,曹操率军发起进攻,成功攻克湖阳,生擒邓济,湖阳守军随即投降。接着,曹操又率军攻克舞阴。
建安三年春正月,曹操回到许县,首次设置军师祭酒一职。同年三月,曹操率军将张绣围困在穰城。到了夏五月,刘表派兵救援张绣,截断了曹操军队的后路。据《献帝春秋》记载,袁绍的叛逃士兵向曹操报告说:“田丰劝袁绍趁早袭击许县,如果能挟持天子来号令诸侯,那么天下就可以轻易平定了。”曹操得知此消息后,决定解除对张绣的围困。
曹操率军撤退时,张绣率兵追击,曹军行进艰难,只能结成连营缓慢向前推进。曹操在途中给荀彧写信说:“敌人来追击我们,虽然我们每天只能行进几里路,但我预计,等到达安众,必定能打败张绣。”当曹军到达安众时,张绣与刘表的军队联合起来,凭借险要地势据守,曹军陷入前后受敌的困境。曹操却临危不乱,他趁着夜色,派人在险要之处开凿地道,将所有辎重全部运过地道,同时设下奇兵。天亮后,敌军以为曹操已经逃走,便出动全部军队追击。此时,曹操下令出动奇兵,步兵和骑兵两面夹击,大败敌军。秋七月,曹操胜利返回许县。荀彧问曹操:“之前您就料定能打败敌人,这是为什么呢?”曹操回答说:“敌人阻拦我们的退路,与我们在绝境中作战,而我军已无退路,只能奋勇向前,所以我知道我们一定会胜利。”
吕布再次受袁术指使,派高顺攻打刘备。曹操得知后,派遣夏侯惇前去救援刘备,然而夏侯惇出师不利。刘备最终被高顺击败,陷入困境。