明军主力在野外前后等了五天,始终没有等到元军出城,谨慎的徐达只好做出攻城的决定,他于八月初二日分兵为左、中、右三路前进,在途中,遇到了少数挡路的元兵。勇将尹坚首先冲上前去,只一会儿工夫,就捉住两位皆佩戴着金虎符的元将,只见他用嘴叼着刀、左右两手好象老鹰抓小鸡一样各自抓住两名俘虏,潇洒地策马返回。尹坚擒拿的两个佩戴“金虎符”的元将,其身份应为万户府军官,属于正规军的军官(根据《元史.兵志》的记载:“金虎符……为伏虎形状,首为明珠,而有三珠、二珠、一珠之区别”。意思是说,不同的金虎符牌存在着嵌有一颗、两颗或三颗明珠的区别,它们分别由统兵七千以上的“上万户府”、统兵五千以上的“中万户府”、统兵三千以上的“下万户府”等将领们佩戴)。
这时候的元朝正规军,虽然上战场时双手软绵绵的,但两脚跑得倒挺快,剩下的士卒群龙无首,那里胆敢以卵击石,终四散而去,一溜烟不见了影踪。
冲破了这股元兵的阻挡,明军终于到达了大都城下。
大都城共有十一个城门,历来由元军中的“怯薛”轮番守卫(“怯薛”作为元帝的宿卫之士,种类有很多。专门守大都城门的“怯薛”,蒙古语叫做“八刺哈赤”,意思是“守门者”)。不过,此时的“怯薛”军早已经跟随元顺帝出走了,留下来的仅剩下一些羸弱士兵而已,例如守卫顺承门的仅有‘数百羸卒’,以致守将朴赛因不花叹息着对身边的人说:‘国事到了这个地步,我唯一能做的只是与城门共存亡了’”。
明军选择大都齐化门作为突破口,在城外填平壕沟迅速登上城墙,非常顺利地入了城。城内局势一度混乱,例如,在太庙里守护神主的元太常礼仪院使陈祖仁在逃往健德门时,就被乱军所害。
在描述明军攻克大都之战的过程时,不要仅仅参考汉文史料,还要参考蒙文史料,才显得公正。不过,蒙文史籍却有一些奇怪的记载,例如《黄金史纲》称:“朱哥(指朱元璋)......以一万辆大车装了财货,以三千辆大车载了身穿铠甲的士兵来到(大都)。司阍者(即看门人)不纳,遂厚贿司阍者以大量财货宝物,才得进入(大都)。”另一本蒙文史籍《蒙古源流》亦有类似的奇谈怪论。流传在蒙古人之中的这类故事,不但与汉文史料记载明军攻下大都的史实相去甚远,而且因为过于荒诞,使之真实性也大打折扣,不过,在某种程度上可能曲折反映了明军在过去的战斗中善于用计取城的战斗作风(元末起义军的确有多次用计取城的例子,例如《明太祖实录》记载朱元璋在郭子兴军中时曾献计智取和阳,他当时建议挑选士兵身穿青衣伪装成敌兵的样子,驱赶着“四匹乘载着物资的骆驼向前行”,并派人先行前往和阳欺骗守军,诈称元朝使者带着大量物品将要来到,准备打赏守城将士,同时,“以身穿红衣的万名起义军尾随在青衣兵的后面,两者相距十余里。等到青衣兵进入城中举火为应,红衣兵即猛攻过来,一举而夺城”)。
总之,明军夺取大都已是板上钉钉的事实,但徐达仍意犹未尽,他命令薛显、傅友德、曹良臣、顾时等将领率兵出城直向古北口,负责搜索以及追击撤离大都的元军,以扩大战果。然而,元顺帝是向居庸关方向逃走的,而明军却向古北口方向出击,两条相反的路线使两支军队恰好错开。
明军不知道走错了路,风风火火地赶到了古北口,迫使守将张益逃跑,并在这个地区陆续与一些残留的元军发生遭遇战。八月八日,骁骑右卫千户陈谅在巡逻途中俘获元将李德明、刘答失贴木儿、谢文振、尹野闾等三十九人而还。八月十七日,右丞薛显等率骑兵巡逻时,获得马匹一千六百匹,牛羊八千余头,车二百五十辆。