遂回撤北平,盛庸收复德州。
李景隆在几个月的时间内一败再败,建文帝撤免了他的大将军职务,建文帝采黄子澄之谋,遣使议和以求缓攻,又任命盛庸为平燕将军,代李景隆统兵代之以盛庸。盛庸屯兵德州,以遏燕军南下。建文二年九月,盛庸率兵北伐,十月,至沧州,为燕军所败。十二月,燕军进至山东临清、馆陶、大名、汶上、济宁一带。盛庸率南军于东昌(今山东聊城),严阵以待。
燕军屡胜轻敌,被南军大败,朱棣亲信将领张玉死于战阵,朱棣自己也被包围,借朱能援军的接应才得以突围。东昌战役是双方交战以来,南军取得的第一次大胜利。兵败后,朱棣总结说:东昌之役,接战即退,前功尽弃,今后不能轻敌,不能退却,要奋不顾身,不惧生死,打败敌手。
建文三年(1401年)二月,朱棣率军出击,先后于滹沱河、夹河、真定等地打败南军。接着,又攻下了顺德、广平、大名等地。战争已经进行了两年的时间,南北交战主要在河北、山东。燕军虽屡战屡胜,但南军兵多势盛,攻不胜攻,燕军所克城邑旋得旋失,不能巩固。能始终据守者,不过北平、保定、永平三府而已。
直取应天、朱棣即位
正在朱棣为此而苦恼之际,应天宫廷里不满建文帝的太监送来了应天府空虚宜直取的情报。朱棣手下谋士也劝朱棣勿攻城邑,越过山东,以迅速行动直趋京城,京城势弱无备,必可成功。于是朱棣决定跃过山东,直捣应天。朱棣据此决定举兵南下,直指京城。
建文四年(1402年)正月,燕军进入山东,绕过守卫严密的济南,破东阿、汶上、邹县,直至沛县、徐州,向南直进。而燕军已过徐州,山东之军才南下追截。四月,燕军进抵宿州,与跟踪袭击的南军大战于齐眉山(今安徽灵璧县境),燕军大败。双方相持于淝河。在这次决战的关键时刻,建文帝受一些臣僚建议的影响,把徐辉祖所率领的军队调回南京,削弱了前线的军事力量,南军粮运又为燕军所阻截,燕军抓住时机,大败南军于灵璧,仅俘获南军将领即几百人。自此,燕军士气大振,南军益弱。朱棣率军突破淮河防线,渡过淮水,攻下扬州、高邮、通州(今江苏南通)、泰州等要地,准备强渡长江。这时,朱棣之子朱高煦引番骑赶到,燕军军势大振。
建文帝曾想以割地分南北朝为条件同燕王议和,被拒绝。六月初三,燕军自瓜洲渡江,镇江守将降城,朱棣率军直趋金陵。十三日进抵金陵金川门,守卫金川门的李景隆和谷王为朱棣开门迎降。燕王进入京城,文武百官纷纷跪迎道旁,在群臣的拥戴下即皇帝位,是为明成祖,年号永乐。历时四年的“靖难之役”以燕王朱棣的胜利而告终。
“靖难之役”历时四年,前期作战南军连连败藉。但自济南保卫战后,南军主力屯驻德州,相机出击,以遏燕军。德州处在运河线上,南北交通便利,燕军自河北南下,始终处在德州的监控之下。燕军南攻时,南军或自德州横出断其归路,或袭扰其补给线,或乘虚北攻。所以,虽以朱棣之善用兵,南军再未出现过战争初期的那种大的挫败,燕军势力基本上被阻在山东以北。朱棣未克山东,故虽屡战屡胜,激战两年半,却始终未能打开局面。等到他越过山东,直趋金陵,半年时间便夺取了政权。
不过,朱棣撇下山东,径直南下,实属铤而走险。南北朝时,刘宋皇帝刘义隆进攻北朝的魏国,而北魏以它的国力和北魏太武帝拓跋焘之雄才大略,在击破刘宋黄河一线之军后,开始兵分五路,大举向南反击,长驱江淮,兵临瓜步,饮马长江,当时北魏太武帝达到了震慑南朝的目的,而未敢渡江以争江南。反观,朱棣的这种战术也只能在那时特殊的形势下才有可能成功。自明初朱元璋杀功臣后,明廷已无堪与朱棣相匹敌