伯顏久在軍旅,曆經戰陣,知己知彼,恩威並濟,有豐富的指揮經驗。他對海都等叛軍,采取固守防禦為主,征進與招撫兼施的策略。戰術上以逸待勞,不輕易出擊。使叛軍在數次出擊,長途行軍中消耗有生力量,然後一舉平定。當時,海都在多次騷擾邊境,長途奔襲之後,其勢已如強弩之末,力量消耗殆盡,平叛的勝利指日可待。但軍中將領不能完全理解他的意圖,朝中又有人以“因仍保守”彈劾他,忽必烈本人也急於取得平叛的勝利。於是,至元二十九年,朝廷決定以玉昔帖木兒代伯顏。玉昔帖木兒前來接任之際,恰值海都再次犯邊。
伯顏欲為朝廷除此大患,遂對玉昔帖木兒說:“公姑止,待我翦此寇而來,未晚也。”伯顏領兵出戰,“與海都兵交,且戰且退,凡七日,諸將以為怯,憤曰:‘果懼戰,何不授軍於大夫!’伯顏曰:‘海都懸軍涉吾地,邀之則遁,誘其深入,一戰可擒也。諸軍必欲速戰,若失海都,誰任其咎?’諸將曰:‘請任之。’即還軍擊敗之,海都果脫去”。這次失機,又使海都得以自立數年。
玉昔帖木兒代伯顏後,元軍展開了大規模攻勢。當年秋,土土哈略地金山,獲海都屬戶三千餘,遷至和林。又向吉利吉思進兵。次年(至元三十年,1293)“師次謙河,冰行數日,始至其境,盡收其五部之眾,屯田守之”。海都派兵來 爭,又被擊敗。到忽必烈去世時,海都的勢力已被逐出按台山(即金山,今阿爾泰山)之外,實力也已大大削弱,與西北諸叛王的鬥爭已經取得了決定性勝利。
但是,與分裂勢力鬥爭多年的忽必烈還是沒有看到平叛鬥爭的最後勝利。
成宗即位後,仍以大將土土哈率軍居守,寧遠王闊闊出(忽必烈子)撫軍。
曠日持久的戰爭不僅消耗了海都的軍力,而且使部眾、將領產生了厭戰情緒,叛軍內部再次發生分化,從海都叛者相繼來歸。元貞二年(1296),諸王藥木忽兒也脫離海都,由土土哈陪同入朝。大德元年(1297),土土哈死,其子床兀兒襲父職繼續領兵駐守漠北。床兀兒率軍逾金山攻八鄰之地,與海都將帖良台戰於答魯忽河,“帖良台阻水而軍,伐木柵岸以自庇,士皆下馬跪坐,持弓矢以待我軍,矢不能及,馬不能進。床兀兒命吹銅角,舉軍大呼,聲震林野。其眾不知所為,爭起就馬。於是麾軍畢渡,湧水拍岸,木柵漂散,因奮師馳擊,追奔五十裏,盡得其人馬廬帳”。回軍,又與海都所遣援軍孛伯遇,戰於阿雷河。“河上有高山,孛伯陣於山上,馬不利下馳。床兀兒麾軍渡河蹙之,其馬多顛躓,急擊敗之,追奔三十裏,孛伯僅以身免”。二年,床兀兒又敗都哇軍於火兒哈禿之地。
連續大勝使諸王將領產生了驕傲輕敵情緒。大德二年(1298)秋,諸王將帥商議防邊時,都認為“往歲敵無冬至之警,宜各休兵境上”。汪古部駙馬、高唐王闊裏吉思主張嚴兵以待,他說:“今秋候騎來者甚寡,所謂鷙鳥將擊,必匿其形,兵備不可弛也。”這年冬天,叛軍果然大規模進犯。闊裏吉思以所部兵迎擊,三戰三克,乘勝逐北,深入險境,而後援不至,為叛軍所俘,不屈而死。這是一次沉痛的教訓,也是自那木罕被劫持後,元軍最大的敗仗之一。成宗使皇侄海山於軍中代闊闊出總兵。四年,海山敗海都軍於闊別列之地,乃蠻帶部落降。
五年,博爾忽之子太師月赤察兒奉命督師。海都大舉犯邊,元軍分為五隊,分別與海都戰於迭怯裏古(帖堅古、鐵堅古山)、合剌合塔等地。月赤察兒自將一軍,“被甲持矛,身先陷陣,一軍隨之,五軍合擊”,叛軍大敗。海都、都哇負傷退兵,海都死,將窩闊台汗國的事務托付給都哇。在都哇的主持下,海都長子察八兒掌管了窩闊台汗國。察八兒是一個瘦弱多病的人,他的繼立,引起了海都諸子女間的不和,窩闊台汗國的勢力進一步削弱。
大德七年(1303),都哇、察八兒、明理帖木兒相聚謀曰:“昔我太祖艱難以成帝業,奄有天下,我子孫乃弗克靖恭,以安享其成,連年構兵,以相殘殺,是自隳祖宗之業也。今撫軍鎮邊者,皆吾世祖之嫡孫,吾與誰爭也?……不若遣使請命罷兵,通一家之好,使吾士民老者得以養,少者得以長,傷殘疲憊者得以休息,則亦無負太祖所望於我子孫者矣。”
不久,都哇請降,月赤察兒不待奏聞,先遣使許其和,叛亂者逐漸來歸。時明裏鐵木兒屯金山,十年(1306)冬,海山領兵逾金山出擊,月赤察兒以諸軍繼往,壓之以威,啖之以利,明裏鐵木兒降。月赤察兒遣將至其部,盡收其部落。
並乘勝掩擊察八兒部落,俘兩部人口十餘萬。
武宗至大元年(1308),都哇已死,月赤察兒遣使至朝,奏請安撫都哇子、察合台後王寬徹,以離間察八兒與察合台後王可能再結的聯盟,使寬徹傾心朝廷;並請處諸降人於金山之陽,大軍屯金山之北,既使降人有足夠的牧地,又可解決軍糧供給問題,加強討叛的力量,得旨允準。後來,在元軍的強大攻勢下,察八兒、禿苦滅等叛王果然投奔寬徹,後者不納,不得已向朝廷請降。曆時四十餘年的西北諸王叛亂終於平定。
乃顏、哈丹之亂