早在一年前李靖就下令各都督府增加战马,充实骑兵,演练长途奔袭,战法早就操演成熟。这次交战之前,他把大唐最为精锐的五千玄甲军布置在朔州,离云州有一千里,又把最熟悉长途奔袭的苏定方调到幽州,指挥幽州骑兵,这两支唐军比突厥骑兵更加精练,行军速度更快,能以每天五百里的速度连续进攻五天。赶到云州城南的唐军则几乎全是步军,也就是徒兵,全由禁军组成,一个月前从长安出发,只带弓弩和轻兵器,化装成乡兵和老百姓,分散开来,宵行昼宿,在候君集离开后悄悄集结到代州,严格封锁消息,突厥人只关注战马,竟然没有察觉到有大量步军靠近。
关键的节点在云州城内,李靖早就设计好要把云州城送给颉利,提前在城内为颉利布下坟场,这一步的关键人物是独孤士极,李靖原来把代州也计算在战场之中,提前让士极以督查军务为名查检代州城,后来因为他判断颉利只盯着云州,极可能在获得财物后放弃攻打代州而没有实施。他把候君集调开,换独孤士极驻守云州,士极到云州后,立刻把康续接了过来,他二人都是建造高手,指挥着幽州军以建造军营为名,在民房集中的地方和主要府库下面挖掘了纵横交错的火道,里面充塞着油脂和易起烟的湿草,梁洛仁以为唐军是潜入城中纵火,其实引火口修在城外,只要外面一点火,立刻引燃火道里的油草,形成数百个火点和数十道火墙,烟火会将全城死死罩住,里面的人逃无可逃。为了这把火,李靖把河东道百姓家里炒菜的油都搜罗光了,汾南县令三个月都没有见过油腥。
战事进展几乎都在李靖预料之中。颉利一直盯着云州,寻找战机,他故意露出破绽,想引诱候君集袭击五花水,李靖哪能看不出个中因由,将计就计把候君集派了出去,颉利果然趁机来攻云州,李靖立刻命令启动战役布置,首先命令大将李勣带两万多骑兵插到草原上,在碛口堵住突厥北窜的路,命令从南方来的步军堵在云州之南,而幽州军和朔方军、胜州军则赶来围歼云州城下的突厥骑兵,阻击救援的突厥人。颉利中计之后,李靖没有派出一兵一卒去救援候君集,而是把能用的兵力全部集结向云州,务必要歼灭突厥主力,他本以为城下会有激烈的包围与反包围,救援与反救援的战斗,没想到颉利被苏定方的虚张声势吓破了胆,只在城外留下少量兵力,自己躲进了围城,更没想到只有区区数千骑兵赶来解救颉利。
颉利被困云州,当时突厥在漠南还有五六万精兵,十多万能战的部民,几十个别部部落,他连发了数道命令要求救援,没想到只来了区区数千附离。压玉果接到被任命为叶护的谕令,并没把本部骑兵交给南厢察婆毕,也没来救援云州,而是率兵急急赶到牙帐,杀了胡女和父亲另外的宠妾,搜罗了财物,带着自己的母亲可敦,裹挟着一大帮突厥勋贵往北跑,如果不是在碛口被李勣截住,他就溜回漠北继位大可汗了。婆毕不知颉利已死,带着四千附离急急赶到云州城下,拼命向里冲,他孤军一支,城里没人接应,与苏定方的幽州骑兵狠斗了一场,附离被打散,婆毕不知所终。漠南草原上当时还有大大小小数十个突厥部落,二十多万人,听到颉利被困的消息,竟然全都拼命向北跑,无一部南来救援。
云州一把火,烧死了颉利和四万多突厥骑兵精锐,梁洛仁的一万梁军、柘羯和数万云州百姓陪死,候君集打破云州后残存的七八万百姓,除了一万多人被突厥掳走,其余都葬身城中。在漠南的突厥所部被唐军包抄掩杀,死了近十万,降了七八万,其余的溃散后逃入大漠,自此漠南再无突厥势力,而大唐只损失了一万代州军,可说是大获全胜。
秦朝蒙恬以三十万精兵击走三万匈奴人,又发百万民夫修筑长城,十年后城倒人亡,匈奴南下,围汉高祖刘邦于白登;汉代漠北之战,卫青以五万对五万击溃匈奴,但汉军死伤近四万,十四万匹战马损失殆尽,匈奴主力远逃到极北,之后一直逞狂二百年;到了西晋,匈奴部更攻下长安,直接把中原王朝给灭了。而李靖仅仅用时一年,就消灭突厥主力,击毙突厥大可汗,肃清漠南,经过此战,大唐自李渊太原起兵以来二十年称臣纳贡的耻辱一雪而尽,中原自北魏分裂后向突厥称臣纳贡的百年历史也告终结,李靖之功已经超越前人,包括秦之蒙恬、汉之卫青、霍去病。