1937年9月,日本华北方面军占领了保定、大同、繁峙等地,到10月,占领了长城线上的阳方口和长城内的宁武。日本华北方面军提出占领山西的意见,日本内阁同意了华北方面军和关东军的提议,准备占领太原。长城防线已被日本突破,太原危急,国民政府决定调用平汉线的兵力,来保住山西。对保卫山西的作战,中共很关注,周恩来一直和阎锡山有着频繁的接触,参与制定作战计划,提出建议。
1937年9月21日,日军六个大队分两路向平型关一线进犯,企图突破平型关防线,与在雁门关北部的日军会合,进而攻占太原,占领山西全境。9月22日,日军向平型关等阵地进攻,中国守军顽强抵抗,战斗十分激烈,日军连攻了三天,并无进展。日军向师团长坂垣征四郎求援,中国方面阎锡山命傅作义率两个旅增援平型关,同时要求八路军配合作战。八路军一一五师开到平型关,伏击日军。9月24日,国军送来平型关出击计划:一一五师向平型关以东的日军出击。林彪三次到平型关、乔沟一带查看地形,观察平型关的山势、河流、道路。一一五师召开连以上干部动员会,分析了战局,做出了具体部署。战士们冒着大雨前往平型关附近的冉庄;道路崎岖,天黑路滑,衣服被浇的湿透,滚着泥水,深秋的夜晚很冷,战士们都冻得打哆嗦。暴雨后,又发起了洪水,战士们趟过洪流,向埋伏点前进。9月25日,部队进入预伏阵地,天阴沉沉的,刮着冷风;又不能生火,防止暴露。林彪命独立团,放过日军第二十一旅团,阻击日军增援部队。独立团和日军打响战斗,战斗十分惨烈,是红军第一次和日军交手。平型关大战的主战场是乔沟伏击战;日军第二十一旅团,乘汽车100多辆,运输物资的汽车200多辆,进入了乔沟峡谷。埋伏的一一五师轻重武器一齐开火,毫无戒备的日军人仰马翻,一片混乱,八路军对日军进行分割包围。一一五师拼死搏杀,与日军白刃格斗。日军发现他们的退路已被堵死,就拼命要占领公路两侧的制高点,即老爷庙。林彪下令:把敌人切成几段,并以一个营抢占老爷庙。拿下了这个制高点,我们就可以居高临下,把敌人消灭在沟里!团长李天佑派三营去抢占老爷庙,日军已占领老爷庙,但日军只是小股兵力抢占了老爷庙,大部分日军挤在公路上。三营战士们冲到公路,和日军白刃搏杀;终于占领了老爷庙制高点,日军去争夺老爷庙制高点。一一五师的另外两个团围了过来,加强火力围歼日军。在这场伏击战中,歼灭日军1000多人,击毁汽车100多辆,缴获了大量物资和武器;中方伤亡600多人。“平型关大捷”的消息传开后,全国各界发贺电。
之后,林彪率一一五师到吕梁山区开辟根据地,林彪骑着大马,穿着缴获的日本军大衣;有个阎锡山的士兵,以为是日本人到了,就朝林彪开了枪,林彪负伤;先回到延安治疗,又去苏联养病,抗战结束才回国。
平型关战役后,大同的日军南下,截断平型关后路,平型关守军被迫后撤;日军突破占领宁武关、雁门关等长城一线。阎锡山与卫立煌研究后决定,在忻口与日军会战;卫立煌任总指挥。忻口位于太原北部,忻口一丢,太原不保。日军调集五六万人,坦克150辆,大炮25门,在板垣征四郎带领下,向忻口进犯。10月4日,日军占领阳明堡;10月5日,日军攻击阳方口,经过一夜激战,日军占领阳方口阵地。八路军在后方破坏了雁门关、岱岳镇、怀仁一带的桥梁、道路、电线,袭扰日军。10月10日,日军攻打原平;10月11日,原平失陷。中国调集重兵到忻口一线;日军占领原平后,向忻口开进。板垣征四郎将日军分为右翼队、左翼队,两路进攻忻口。忻口两边是五台山、云中山,日军采取中间突破的战术,向南怀化阵地和阎庄阵地猛攻。10月13日上午10点,日军突破南怀化阵地。中国守军堵击,夺回南怀化阵地;进攻阎庄阵地的日军,激战至傍晚,突破阎庄阵地。10月13日夜晚,卫立煌组织部队反击日军;双方大战,进入对峙状态。
卫立煌鉴于南怀化阵地关系忻口战役的全局,决定调集5个旅的兵力,歼灭南怀化日军。10月16日,南怀化阵地反击战开始;反复争夺南怀化阵地,南怀化阵地的日军大部分被歼灭。日军援兵开到,卫立煌向蒋介石发电,要求增援;蒋介石、阎锡山调集军队去支援。10月20日,日军向中国守军施放毒气;日军在地面战场受挫,就派飞机轰炸忻口阵地。八路军夜袭日军机场,炸毁飞机24架,歼灭日军100多人。忻口中国守军与日军对峙了20多天,日军无进展、陷入被动。但山西东部的中国守军失利,娘子关失守,中国守军向太原溃退,日军跟进;忻口中国守军有被包围的危险。阎锡山决定忻口守军全线后撤,11月2日,卫立煌下令撤退。撤退时,部署得当,秩序很好。忻口战役,烧毁民房4万多间,百姓死亡一万多人,牲畜走失5000多头,损失财物无数。
忻口战役,日军是从北路进攻;日军同时进攻山西东部。日军占领石家庄后,继续向西边的山西方向开进。阎锡山只把大量兵力部署到山西北部,山西东部的兵力薄弱;直到10月12日,阎锡山才调孙连仲第二十六路军增援晋东。1937年10月12日,日军进攻娘子关附近的井陉、雪花山。10月12日下午,日军攻占井陉阵地。10月13日,日军继续攻打雪花山等阵地;负责防守雪花山阵地的一〇二团团长张世俊,擅自放弃阵地,雪花山失守;师长赵寿山处死了张世俊。赵寿山率部去夺回雪花山,但未能收复。在日军进攻井陉、雪花山时,同时攻打旧关。旧关是中国守军兵力薄弱地区,兵力空虚,是防御漏洞;日军发现这一点,全力攻打旧关。10月13日下午,旧关失陷;旧关失陷,等于截断了娘子关后路,中国守军去夺回旧关。日军从井陉派军增援旧关;10月16日早晨,中国军队大规模进攻旧关;发生激烈战斗,战至10月19日,中国军队未能夺回旧关。10月22日,日军已逼近娘子关,日军右纵队继续正面围攻娘子关,左纵队迂回到娘子关侧翼。10月26日,娘子关后方已被日军占领,娘子关中国守军转移;主力转移后,娘子关仅有少数兵力防守,日军占领娘子关,娘子关失守。娘子关失守后,日军继续向西,往太原开进。娘子关如果不失守,忻口中国守军就不必主动后撤,忻口也不会失守。
忻口、娘子关失守后,日军两路进攻太原。阎锡山委任卫立煌为“第二战区前敌总司令”,傅作义为“太原守备司令”,进行保卫太原。1937年11月4日,阎锡山等人撤离太原;太原守城部队进入城内,傅作义下令封闭城门,构筑防御工事;三十五军副军长曾延毅为太原戒严司令,负责维持城内秩序。11月5日,北、东两路日军逼近太原;日本空军对太原进行轰炸。日军包围了太原,大炮轰城;日军飞机撒下传单,要求中国守军投降。11月8日,日军炮火将城墙轰开十多处,日本兵向城内猛冲;与中国守军巷战。傍晚,日军伞兵空降到城中大校场,四处袭击。晚上21点,傅作义下令突围撤退;守城部队从大南门突围,撤离太原;太原沦陷。