公元一三六八年九月,明朝名将常遇春奉朱元璋军令带着数千精兵强将率先出发,气势汹汹杀奔山西而来,徐达率主力紧跟其后,他们的目的是要歼灭盘踞在太原的元朝势力王保保主力。正当他们一路攻城掠地的时候,坐镇山西的元军将领王保保却打着自己的如意算盘,计划避开明军主力迂回到敌后,发兵直攻北平。此举可谓一箭双雕,一来是奉了皇命要夺回这个昔日元朝的首都;二来可以逼迫徐达回师自救,缓解山西面临的巨大压力。
然而,当徐达收到敌人进军后方的消息的时候,他断然拒绝撤兵回援北平,而是坚持继续进攻山西,以其人之道还治其人之身地指挥大军强攻王保保的命脉所在地太原,迫他回师援救。徐达让骑兵先出发日夜兼程赶往目的地,步兵再步行跟上。命令一下达,骁将薛显、傅友德立即带领三千骑兵进犯太原,徐达统领主力随后。王保保因为要绕道而行所以行军速度很慢,当他在中途收到敌人已兵临太原城下的消息时,吓得面无人色,急忙命令部队回援。
当元军前锋的数万精锐骑兵突然出现之时,发生了天方夜谭式的戏剧性一幕,他们居然在明军悍将傅友德、薛显与八十名重甲骑兵的冲击下一下子队形大乱,互相践踏,自致伤亡,并且立即退却了,退到了城西扎下营寨。这一事件的发生只能说明了元军内部军心的涣散,而不是它不堪一击。王保保十多万主力也随后赶到,与骑兵会合,不知道出于什么原因,他竟然没有下令马上出击消灭面前只有区区三千人的敌军,而是先安营扎寨,白白错失了歼敌良机。
与之相反,明将却主动抓住了战机。是夜,明将郭英带着十多名骑兵在内应的指路下悄悄潜入敌军大营,并且马上点着火炮发出轰鸣响声作为进兵信号。三千明军骑兵一见信号,马上从四面八方冲入敌营。元军猝不及防,乱成一窝粥,自相践踏,死伤惨重。徐达带领大队人马及时赶到,加入围歼战之中。
此战虽然王保保侥幸逃脱了,但明军大获全胜,不但顺利占领了太原,还俘获了四万降兵与四万多匹战马,可谓收获满满。