老的沙留在孛羅帖木兒軍中後,搠思監、樸不花與皇太子結成一夥,以王保保為外援,強令孛羅帖木兒交出老的沙。孛羅帖木兒拒絕。於是搠思監、樸不花就誣陷孛羅帖木兒與老的沙圖謀不軌,由順帝下詔,削去了孛羅帖木兒的官職,命令他解兵權後回四川封地。孛羅帖木兒抗旨,於是王保保就得到了朝廷出兵討伐孛羅帖木兒的命令。就在這個時候,宗王不顏帖木兒也對搠思監、樸不花等人的專橫感到了不滿,他一麵上書替孛羅帖木兒辯解,一邊很快出兵與孛羅會師。
順帝看到這種局勢,便又降下聖旨,流放了搠思監與樸不花,恢複了孛羅帖木兒的官職。可是盡管順帝下了詔書,搠思監和樸不花仍然留在大都。擁兵自重的孛羅帖木兒就找到了進兵京師的借口。他率軍進攻京師,在居庸關打敗了大都的軍隊,皇太子也被迫逃出了大都。最後在孛羅帖木兒的要求下,順帝交出了搠思監和樸不花。這兩名奸臣被孛羅帖木兒處死。就這樣孛羅帖木兒演了一幕元末曆史上“清君側”的鬧劇。這之後,孛羅帖木兒被順帝任命為太保、中書平章政事,兼知樞密院事等官職後,率著軍隊浩浩蕩蕩地開出了元大都。
1364年五月,皇太子回宮,他立刻命王保保調動軍隊,進攻孛羅帖木兒。王保保命白鎖駐守京師,命貊高、竹貞、關保分別率軍攻擊孛羅帖木兒,自己親駐太原,調督諸軍。七月,孛羅帖木兒與禿堅、老的沙再一次以“清君側”為名進攻京師,皇太子也再一次逃到了太原。孛羅帖木兒這次入京後處死了順帝身邊的一些佞臣,可見他確實沒有造反的意思。可是很快,在1365年三月,皇太子與王保保集結了嶺北、甘肅、遼陽、陝西各地軍隊,共同討伐孛羅帖木兒。這次孛羅帖木兒戰敗,自此意誌消沉,整天與老的沙飲宴,荒淫無度,而且喜怒無常,經常酗酒殺人。孛羅帖木兒的這些舉動也使得順帝十分不滿,他密令威順王寬徹普化子和尚刺殺孛羅帖木兒。和尚雇殺手在這一年的七月二十九日將孛羅帖木兒刺殺。老的沙帶著孛羅帖木兒的家眷逃到了禿堅的軍中,隨後與禿堅一起投奔了趙王,鼓動趙王起兵。趙王將老的沙和禿堅兩人抓了起來,送到了朝廷,這樣孛羅帖木兒的勢力就被徹底清除了。
孛羅帖木兒的勢力被清除後,並不是說元朝各軍閥間的混戰就此停止了,很快皇太子、王保保與北方漢人軍閥李思齊之間的矛盾又成為了新的軍閥混戰的導火索,而這一次混戰一直持續到朱元璋攻進大都後,仍然在繼續。
就在元朝各大軍閥勢力在進行著毫無價值的消耗戰的同時,朱元璋逐漸消滅吞並了南方各起義勢力。1367年十月,朱元璋消滅了張士誠後,他命徐達北伐。
1368年,明軍會集在德州,分水陸兩路沿運河北上,占長蘆,克青州,到達直沽,進逼大都。七月二十六日夜,元順帝放棄了防禦堅固的元大都,倉皇北逃。同年陰曆八月初二,徐達率明軍兵不血刃進入大都。元朝在整個中國的統治就此結束。
元人並沒有就這麼簡單地退出曆史舞台,逃至蒙古草原的北元流亡政府又繼續維持了一段時間。
元廷最初北遷的時候,元人仍保存著完整的統治機構和相當的軍事力量。當時的蒙古政權所控製的疆域,東起貝加爾湖、興安嶺山麓,西到天山,北至額爾齊斯河及葉尼塞河上遊,南抵長城的大片領土,並且與各藩國仍保持著聯係,其中有東麵的高麗、西麵的蒙兀兒斯坦、中亞的帖木兒帝國等。就中原地區而言,在山西和甘肅,有中書左丞相王保保所統率的10萬大軍,陝西則是元漢將李思齊的勢力範圍,遼東方麵更盤踞著納哈出的20萬雄師,另外遼陽、雲南、今河北盧龍縣、甘肅、寧夏、新疆地區以及青海都依舊被元人所控製著。可見,如果不是元人內訌的話,朱元璋想要北伐,勢必困難重重,難以如願。
元廷北遷不久,就力圖恢複在全國的統治。首先元順帝命王保保率兵出雁門關,由保安州經居庸關進攻大都。明將徐達采用了機變的戰術,他趁王保保出兵大都之機,突襲元軍後方重鎮太原。王保保至保安州得到情報後,被迫還兵。雙方在太原地區陷入僵局。王保保缺少糧草,知道輕易與明軍交戰絕對討不到什麼便宜,於是在太原城西安營紮寨,準備等待時機,與明軍一決。不想王保保的部下暗投明軍作了內應,明軍夜襲王保保軍營,王保保大敗,僅率十八騎突圍出去逃到了大同。
1369年五月,順帝又命令丞相也速率萬餘騎兵出山西營於白河。通州明軍守備力量薄弱,但由於明將曹良臣采取了虛張聲勢的戰術,也速不明真情撤軍,從而解除了元大軍壓境的威脅。同年八月,順帝遷都達裏泊(達賚湖),命令脫列伯、孔興以重兵攻大同,以為進攻大都鋪平道路。明將李文忠率軍出雁門關,在今山西馬邑上方遭遇,進行了一場惡戰。不久明援軍到達大同,結果大敗元軍,俘虜了元將脫列伯。包圍大同的元將孔興得到這一情報後,立即撤兵逃往綏德,遭到明軍追擊,大敗而歸。這一年,明軍再次大舉北伐,元順帝迫於明大軍威勢,又放棄了上都,逃到了應昌(今內蒙古克什克騰旗境內)。