西汉大军原拟由定襄北进,并由霍去病专力对付单于。但在进军途中,捕得匈奴俘虏,得知单于驻地所在,于是又改变计划,命霍去病单独率领一支人马从代郡出击,卫青仍按原计划出定襄。卫青考虑到前将军李广年纪已高,就没让他担任先锋,而是与右将军 赵食其两军合并,从东面迂回策应。
卫青自己率左将军公孙贺、后将军曹襄从正面进兵,直插匈奴单于驻地。此时,匈奴方面赵信向伊稚斜单于建议:“汉军不知道厉害,竟打算穿过沙漠。到时候,人困马乏,我们以逸待劳,就可以俘虏他们。”于是下令所有的粮草辎重,再次向北转移,而把精锐部队埋伏在沙漠北边。
卫青大军北行一千多里,跨过大沙漠,与严阵以待的匈奴军遭遇了。卫青临危不惧,敏锐的识破了对手的用心,命令部队用武刚车(铁甲兵车)迅速环绕成一个坚固的阵地,然后派出五千骑兵向敌阵发起冲击。匈奴也不敢大意,以一万骑兵来迎击,开始的时候双方都很谨慎。
但匈奴的冲击力习惯性的将战斗引入乱战的局面,战场呈现胶着状态,此时战局正悄然向有利于汉军的方向发展。由于卫青事先构筑了坚实的防线,匈奴的中线突击没能冲破汉军的防线,随着时间的延长,匈奴军逐渐进入了汉军的口袋,汉军的中线部队开始收缩,有意将匈奴引入口袋中。
战斗持续到了黄昏,突然狂风大作,飞沙走石,两军在沙漠中对面不相见,局面一度陷入混乱。卫青却能处变不惊,敏锐的感知到反攻的时机到了,下令早已待命的两翼骑兵部队突进,对敌完成合围。匈奴的军队在汉军侧翼的打击下终于崩溃,单于看到汉军人数众多,士气旺盛,知道无法取胜,慌忙骑上快马,率领精壮骑兵数百人,向西北方向突围逃去。
卫青发现单于逃走,立刻派出轻骑连夜追赶,匈奴人马纷纷溃散。汉军追赶了两百多里,虽然没有找到单于的踪迹,却俘虏匈奴官兵19000人。卫青率领大军一直挺进到寘(田)颜山赵信城(今蒙古人民共和国境内)。匈奴兵已经逃空,城里贮存了不少粮草。大军在那里停留了一天,卫青让兵士们饱餐了一顿,把多余的积粮烧了,然后奏凯而还。
在《正说两汉四百年》一书中比较全面客观的评价了卫青在这次战争中的表现:在战争中,卫青突出的个人能力和沉着坚毅的指挥,给了将士们以极大的鼓舞,恰恰激发了士兵的作战能力,从而弥补了兵力上的不足。卫青正面的拼杀为两翼的迂回包抄赢得了时间。匈奴溃败时,卫青又乘胜追击,向纵深发展,扩大战果,并焚毁其粮库,给匈奴以毁灭性的打击。这是一次堪称完美的决战。
另一路骠骑将军霍去病,率兵出代郡后,北进两千余里,渡过大沙漠,与左贤王的军队遭遇。在战斗中,俘获了匈奴顿头王、韩王以下7万多人,活捉匈奴的相国、将军、当户、都尉等83人,左贤王及其将领弃军逃走。