燕王朱棣誓师抗命,以清君侧为名,招降了参政郭资、副使墨麟、佥事吕震以及同知李浚、陈恭等人。燕王那边已经攻下通州、蓟州、遵化,夺下居庸关、怀来。建文帝这边仍然迟疑不决。于是开平、龙门、上谷、云中的守将全部望风归降。谷王朱橞镇守宣府,因为离怀来比较近,担心遭到兵祸,竟然抛弃藩土,逃到南京去了。
京中听到警报,建文帝祭告太庙,削掉朱棣的属籍,并废他为庶人,接着诏示天下。特命宿将耿炳文为征虏大将军,驸马都尉李坚、都尉宁忠为副将,带兵讨伐燕王,接着又命都指挥使潘忠、杨松等人分道并进。燕王派张玉前去打探虚实,张玉回来后说:“耿炳文年事已高,潘忠、杨松有勇无谋,行军安营都缺乏纪律,不用担心。只是我军如果想南下,必须先攻下潘忠、杨松才行。”燕王点头,当即下令移军涿州,在桑娄屯兵。那时正是中秋,天高月朗。燕军渡过白沟河后,直达雄县城下。杨松毫无防备,还乘着中秋佳节大摆宴席,醉饱酣睡。不料睡到半夜,燕军攀墙而上,大刀阔斧地砍入城中。杨松从梦中惊起,慌忙迎敌,已经是来不及了。霎时间九千将士全部战死,杨松也死在乱军之中。
燕王攻陷雄县之后,对将士们说:“潘忠就在莫州,还不知道城已经被攻破,一定会带兵前来支援,我们趁机活捉他。”燕王当即命千户侯谭渊带领一千官兵,渡过月样桥,埋伏在水中,等潘忠的兵马过去之后,马上占据桥梁,断了他们的归路。燕王麾兵出城,严阵以待。潘忠果然引兵前来,越过月样桥,直逼雄县。快到城下的时候,望见前面都是燕军,不禁慌了手脚。交战的时候,燕军生龙活虎,锐不可当,潘忠料定难以抵挡,只好边战边退。谁知刚刚退到桥边,水中突然蹿出一个人,大吼一声:“谭渊在此,快快束手就擒!”潘忠还没有看清,就被谭渊手起枪落,刺倒在马下。谭渊的手下一哄而上,把潘忠捉走了。潘军腹背受敌,不是被杀死就是被淹死。
燕王攻陷莫州后,接着商议下一步的作战计划。张玉说:“为什么不直取真定?敌人刚刚聚集在那里,大营还没有扎稳,我军乘胜进攻,一定大获全胜。”燕王非常赞同,马上下令向真定进发。途中擒获了耿炳文的部下张保。燕王好言抚慰,张保自称愿意投降。燕王问起耿军的情形,张保说:“耿军共有三十万人,先到的有十三万,分别驻扎在滹沱河的南北岸。”燕王说:“你既然诚心归降,我就放你回去。你就说是偷了匹马逃回来的,然后把我军的战况全部告诉耿炳文。”张保点头离开。诸将上前说道:“大王直逼真定,本来是想趁他不备,怎么让张保去通风报信呢?”燕王笑着说:“诸将有所不知。耿炳文将兵马一半扎在大河南面,一半扎在大河北面,南北互相支援,我们很难取胜。只有让他知道我们的行踪,将南北的兵力合在一起,才能一举歼灭。而且,他们如果听说雄县、莫州的败状,一定会挫伤锐气。”诸将齐声称妙。之后,耿炳文果然将南岸的兵都移到了北岸。燕王派张玉、谭渊、马云、朱能等人绕到城的西南面,连破耿军两座大营。耿炳文出城迎战,张玉等人率兵奋击,两下里喊杀连天。这时,燕王亲自带着铁骑,沿城夹攻,耿军大乱。耿炳文支撑不住,慌忙逃回。朱能率死士在后面追杀,到了滹沱河,耿炳文仍然有几万兵马。朱能奋勇向前,冲入耿炳文的阵中。耿炳文的部下早已无心恋战,相继逃散。副将李坚、宁忠、都督顾成、都指挥刘燧等人都被擒获。耿炳文逃到真定,闭门固守。燕军攻了三天,没有攻下,就退回北平去了。
建文帝听说耿炳文战败,非常懊恼。便听从黄子澄的话,拜李景隆为大将军,赐给他通天犀带,并亲自饯行。齐泰说李景隆能文不能武,建文帝毫不理会。没过多久,耿炳文辞官归来,建文帝就一再催促李景隆进兵。李景隆到了德州,收集耿炳文的部下,并在各路调来五十万大军,在河间扎营。燕王听说后,高兴地说:“从前汉高祖用兵如神,都只能领兵十万。李景隆这么个竖子,有什么才能,竟给他五十万兵马!这不是自取灭亡吗?”话音未落,就有探子来报:“明将吴高、耿瓛、杨文等人进军永平。”燕王马上麾军支援,有将领问道:“大王去支援永平,要是李景隆乘机偷袭北平,该如何是好?”燕王说:“不用担心李景隆,我去支援永平就是想引他前来,先破吴高,再破李景隆。”当下命儿子高炽守城,并告诫他只许坚守,不许出战。自己则带着大军直达永平。吴高本来就胆小,听说燕军大兵将至,竟然丢下军械物资,退到山海关去了。燕军从后面追击,杀死了几千名士兵。
李景隆听说燕王去支援永平,果然带兵前来攻打北平。朱高炽严防死守,就连城里面的妇女也向城下乱丢瓦砾。李景隆军令不严,竟然被打退。朱高炽又派勇士乘夜前去偷袭敌兵大营。营中士兵大受惊扰,竟然退到十里以外的地方驻扎。只有都督瞿能愤怒交加,自己带着两个儿子以及一千多名精兵,直攻张掖门。马上就要登城的时候,李景隆因为他擅自做主,起了猜忌,下令缓攻。瞿能只好作罢。守兵连夜用水浇注城墙。第二天一早结水成冰,城墙非常光滑,不能攀登,两军相持不下。
这时候,燕王已经移师东北,暗图大宁。原来大宁由宁王朱权镇守,他东控辽左,西接宣府,部下全都骁勇善战。燕王抵达大宁城下后,暗中命令精兵四下埋伏,自己单骑入城。一见宁王就握着他的手大哭起来,只说:“建文有负于我,现在北平被围,朝不保夕。求弟弟设法救我。”宁王此时也有兔死狐悲的念头,长吁短叹一番之后,替他上疏,求建文帝免他一死,接着设宴款待,流连了好多天。城外的伏兵大多已经混到城里,与宁王的部下互相联络。燕王准备告辞,宁王将他送出郊外,置酒饯行。第一杯递给了燕王,燕王一饮而尽;第二杯又递到燕王手里,燕王忽然将酒杯扔在地上,大喝一声:“来人啊!”话音刚落,燕军一拥而出,将宁王擒住。宁王的部下都在一旁袖手旁观,大宁都指挥朱鉴上前争夺,竟被燕军杀死。燕王接着麾兵入城,揭榜安民。燕王又派兵分守要害,自己带着大宁的降兵开赴北平。到会州时,燕王检阅将士,设下五路大军,命都指挥张玉统帅中军,朱能统帅左军,李彬统帅右军,徐忠统帅前军,房忠统帅后军,命大宁的降兵分别隶属于各军。五路大军浩浩荡荡,直逼北平。
当时天气寒冷,大雪纷飞。燕王暂且驻扎在北河西面,河水汪洋浩瀚,无舟可渡。燕王望着天空默想:“老天如果你真的要帮助我,今天晚上就让河水结冰吧。”谁知,上天有灵,刮了一晚上的寒风,将河水冻得结结实实。燕王大喜,马上麾兵渡河。那时正碰上李景隆在河对岸扎营。先锋都督陈晖渡河截击,被燕军一阵驱杀,大败而逃。燕军渡河上岸之后,河水竟然开始融化。燕军喜得神助,抖擞精神,直捣李景隆的大营。从午时一直杀到申时,连破七座营寨。李景隆抵挡不过,趁夜逃走。燕军进逼城下,见城外还有敌兵,只管奋勇杀入,城中这时候也杀出燕兵,内外夹攻,杀得敌人尸横遍野,血流成河。有几个士兵侥幸逃脱,连夜南逃,追上李景隆的残军,一同返回德州。李景隆逃到德州后,懊恼得很,准备再次调集军马,等来年春天大举进攻。这时,忽然听说有圣旨颁来,吓得面如土色。谁知打开一读,竟然被加封为太子太师,这事情来得突然,连李景隆都莫名其妙。