朱元璋在大举北伐以前,早就于至正十九年(1359年)派遣一个“千户”王时,到浙江搭上方国珍的运粮船,由海路混进大都,窥探元朝政府的虚实。

那时候,丞相脱脱已遭贬黜而死。朝中最重要的人是察罕帖木儿。此人的祖先是西夏人(唐兀氏),住在北庭(新疆孚远),从祖父以来移居河南沈丘已有三代。他有一个号,叫做“廷瑞”,并且姓了李。当地的人称他为李察罕。他应过“进士举”,虽则没有中,可见汉化已深。他在至正十一年有感于刘福通香军之杀官烧城,“骚扰地方”,而元朝的官军毫无镇压能力,就招集了沈丘的子弟几百人,自保乡里。不久,他会合了罗山人李思齐的“义兵”,从香军的手中夺得罗山县城。元朝政府发表他为汝宁府(汝南)的达鲁花赤。(元朝在每一个路或府,与每一个县,均设达鲁花赤,由蒙古人或色目人或其他的“非汉人”充任,位于汉人总管与县尹之上。)此后,他东征西讨,到了至正十八年之时,已经官拜“陕西行省右丞兼陕西行(御史)台侍御史兼河南行枢密院同知”,受诏“守御关陕晋冀,镇抚汉沔荆襄,便宜行阃外事”。这一年年底,他被升为陕西省平章政事。次年五月,他“收复”汴梁(开封),使得刘福通不得不退守安丰(寿县),元朝升他为“河南行省平章政事,兼知河南行枢密院事,陕西行台御史中丞,仍便宜行事”。他兼了豫陕两省的文武行政,同时握有监察全权。至正二十一年,他拿下了全部山东,只有益都和莒州尚在香军手中。元朝更进一步,升他为(中央的)中书平章政事(位置仅次于丞相),兼“知河南山东行枢密院事,陕西行台御史中丞”,地盘由两省而扩充为三省(比现在的这三个省大)。

这一年八月间,朱元璋为了怕他转师南下,派了一个小官汪河,前往山东,和他“通好”。通好的内容如何,明朝的官方历史家不敢明说。(实际上可能是向元朝称臣。)

次年六月,察罕帖木儿被田丰、王士诚刺死。他的事业,由养子王保保(扩廓帖木儿)继承。王保保在五个月后打下益都,杀了田丰、王士诚,也打下了莒州。王保保派人到应天(南京),与朱元璋重温旧好,朱元璋再派汪河前往,却被王保保扣留,拘在河南陕州。一拘,便是三年,到了至正二十五年才放回来。

王保保的为人,不如察罕帖木儿:野心大,地盘思想重。和王保保势均力敌的,有一位孛罗帖木儿与一位李思齐,孛罗帖木儿与王保保抢山西,抢中央的政权;李思齐呢,和王保保闹意气。结果,内战连年,给朱元璋造下北伐中原的机会。

孛罗帖木儿,是道地的蒙古人。他的高祖父的祖父孛罗带,是成吉思汗的卫兵。孛罗带的儿子太答儿,是蒙哥可汗(元宪宗)的一个都元帅。太答儿的儿子纽瞞,打下成都,也受委为都元帅。纽瞞的儿子也速答儿,打下重庆,历事元世祖、成宗、武宗,官至云南行省左丞相平章政事。也速答儿的儿子南加台,作了四川行省平章政事。南加台的儿子答失八都鲁,是元顺帝的大将,曾经打下香军所占的襄阳与太康,官至河南行省左丞相,兼知枢密院事,加“开府仪同三司,太尉”,四川行省左丞相,死于至正十七年十二月。答失八都鲁的儿子,便是孛罗帖木儿。

元顺帝在至正十八年正月,派孛罗帖木儿为河南行省平章政事,统率答失八都鲁的部队。在其后两年半的期间,他打下了卫辉(汲县)、濮州、曹州,击败关先生于云中,击败杨诚于蔚州及飞狐,击败王士诚于台州(五台),驻军大同。

这时候,王保保驻军在冀宁(太原)。元朝政府叫王保保与孛罗帖木儿两人各守防地,以石岭关为界。孛罗帖木儿一心要把冀宁划入自己的范围内,在至正二十年九月出兵逾过石岭关,对王保保作战,然而打不下冀宁。打到至正二十三年正月,他夺得了王保保的真定(河北正定)。

这时候,元朝内部酝酿着宫闱政变。皇太子爱猷识理达腊,为第二皇后高丽人奇氏所生。奇氏信佛崇孔,见到元顺帝荒淫昏聩,颇想假借王保保的力量,逼迫元顺帝让位。她有一个亲信,宦官朴不花;也有一个羽党,右丞相搠思监。反对她的人也很多,以御史大夫老的沙为首。她却有办法叫老的沙失宠于元顺帝,加以放逐。老的沙逃奔到孛罗帖木儿的军营。皇太子派人去要,孛罗帖木儿不给。

至正二十四年三月,右丞相搠思监用元顺帝的诏书,削去孛罗帖木儿的兵权。孛罗帖木儿抗命,而且杀了钦差。四月,孛罗帖木儿带兵进京,见到元顺帝,恢复了兵权与官职(太保,中书平章政事,兼知枢密院事),满意而去:回大同。五月,右丞相搠思监又怂恿了元顺帝,命令王保保进攻孛罗帖木儿的大同。孛罗帖木儿再度带兵来京,皇太子统率若干军队出城抵御,大败,逃到太原,投奔王保保。元顺帝把搠思监与朴不花押解给孛罗帖木儿,杀掉。孛罗帖木儿进入大都,受拜为中书左丞相,整个政府入于他的掌握。他开除了一些宦官,禁止番僧胡作非为,努力节省中央开支,停止了若干不必要的修缮营造,也把第二皇后禁闭了一百多天。他派遣一位伊苏,带兵南下,打王保保,不料这伊苏却与王保保讲和,连在一起。

至正二十五年七月,王保保的兵逼近大都,元顺帝埋伏了几个勇士在宫内延春阁,把孛罗帖木儿打死。八月,第一皇后宏吉剌氏去世。九月,王保保带了太子回大都,被拜为太傅,左丞相。事前事后,第二皇后奇氏与太子均叫王保保逼迫元顺帝让位,退居为太上皇,王保保不肯。王保保在大都住了两个多月,不耐烦,请求元顺帝派他打朱元璋。元顺帝封他为“河南王”,授权给他“总制关陕晋冀山东诸路并迤南一应军马,凡机务钱粮黜陟予夺,悉听便宜行事”。年底,第二皇后奇氏被升为第一皇后。

王保保去了怀庆(河南沁阳);次年二月,渡河南进。他征调在陕西的李思齐、张思道、孔兴、脱列卜这四个将领的兵。这四人均不奉命。王保保于是不再南进,而转师西向,派关保进入潼关,打这四人。一共打了一百多仗,不分胜负。

到了至正二十七年七月,他加派貊高去打。貊高的兵,多半是孛罗帖木儿的旧部,开到中途,便在卫辉(汲县)叛变,奉貊高为“总兵”,向元顺帝上表,告王保保的状。这时候,元顺帝已经于第一皇后奇氏的影响之下,命令皇太子主持一个新立的“大抚军院”,“悉总天下军马”,把王保保的防区限制在潼关以东。貊高叛变以后,元顺帝索性罢免王保保本兼各职,令他以“河南王”的资格,退居河南(洛阳)。王保保很气,便擅自把军队撤回黄河以北。

关保在陕西,也对王保保叛变,不再打李思齐等人。元顺帝命令貊高与李思齐合力,讨伐王保保;又把王保保的根据地划给关保驻防。李思齐倒未敢走出潼关,找王保保打;貊高、关保二人,与王保保交锋,均被王保保击败,杀死。王保保回到太原,不肯出来抵御朱元璋的北伐军。

这一年,至正二十七年,十月甲子日,朱元璋命令徐达、常遇春二人统率二十五万大军,北伐。先打山东,后打河南,然后打河北,指向大都。

王保保原有一个弟弟,脱因帖木儿,带领若干精兵留在山东。为了对貊高作战,这脱因帖木儿被调走,山东只剩下江苏兴化人王宣和他的儿子王信。这王宣与王信父子是经不起徐达、常遇春一打的。

徐达、常遇春由山东转到河南,在汴梁(开封)的梁王阿鲁温不战而降。这位阿鲁温,是察罕帖木儿的父亲,年已老迈。元顺帝到了最后关头,才下诏取消“大抚军院”,恢复王保保的官职与爵位,求王保保救援大都。

王保保不曾来得及整师而出,大都已经入于徐达、常遇春之手。