日军攻占广州、武汉,切断由香港经粤汉路进口物资的中国国际交通线后,为进一步封锁中国的沿海,1939年2月,又侵占了中国的海南岛,以作为其海军封锁作战的基地。此时,由越南海防港经滇越路至昆明和经镇南关至广西,成为中国对外贸易的主要通道。4月和6月,日本海军和陆军曾先后提出攻占南宁,以切断中国这一国际交通线和获得对中国西南进行航空作战基地的计划。但当时日军参谋本部正忙于在诺门罕地区对苏军的作战,因而未能实施。

9月1日,德国军队进攻波兰;9月3日,英、法宣布对德处于战争状态,为全力增强其本土的国防,英、法对东南亚的殖民地已无力顾及。9月27日德军占领华沙后,日本政府乘机于当日令驻法国使节向法国提出停止经越南向中国运送作战物资的要求,被法国拒绝。日本大本营遂于10月16日向中国派遣军下达攻占杭州湾、南宁、镇南关、龙州的“大陆命第375号”作战命令,并令第5师团及台湾旅团执行这一任务,由驻广州的第21军司令官安藤利吉指挥。第21军的作战计划主要内容为:第5师团和台湾旅团在钦州湾登陆后,沿钦州至南宁公路两侧,分3路平行向北进击,攻占南宁。第21旅团为中路,直指南宁;第9旅团力西路,由南宁以西的金鸡村、江西村实施迂回包围;台湾旅团为东路,由邕宁渡过邕江、郁江后,攻向四塘,从东迂回;海军第3联合航空队(辖第14、第15航空队)、陆军第21独立飞行队协同作战。预计11月15日开始登陆。

武汉会战之后,第四战区负责维护中越国际交通践线的中国军队是夏威的第16集团军。1939年10月,长沙会战结束后,军事委员会判断日军可能增兵再攻长沙,近期内不会进攻桂南。力发动冬季攻势,第四战区减少了第16集团军的兵力,将原在鹤山、高明的第64军调走。第16集团军仅剩第31(韦云淞,辖第131、第135、第188师)、第46军(何宣,辖第170、第175师、新19师)和独立第1,第2、第3、第4团,担任桂南方面广西东兴至广东西江以南广大地区的守备。夏威为弥补兵力不足,决定采取重点守备的方针;又因其判断日军如进攻时,主力在北海登陆、一部在钦防登陆的公算最大,因而作出如下的部署:第46军(欠第10师)附独立第1、第2团,主力位置小董、灵山、郁林,一部守备防城,合浦、廉江沿海地区。第31军(欠第131师)附独第3、第4团,主力位置高明、鹤山,一部守备新会、江门、三水之线,另以一部守备水东,电白、阳江沿海地区。第131、第170师为集团军预备队,分别位于容县、兴业,总司令部位于贵县。第46军以新19师任防城、钦旦一带守备,第175师任合浦、灵山一带守备,独立第1、第2团任博白,新塘间守备,军部位于南宁。正当各部队陆续调动、部署尚未就绪之际,日军即开始了进攻。

11月13日,日军第21军的进攻部队,乘70多艘舰船,冒强风由三亚出港,驶向钦州湾。15日8时,第5师团第9旅团首先在预定的钦州西岸企沙、龙门突然登陆。防守该地区的新19师第56团奋力抗击,但无力阻止日军登陆。何宣判断日军有进攻南宁,切断中国国际通路的企图,一面令新19师竭力抗击日军登陆,将师主力配置第二线阵地迎击登陆之敌;一面电请第16集团军速令第170师归建,向南宁集结作为军预备队。夏威当即令第170师开南宁,第131师开陆川、博白,第188师开容县,第135师开贵县。16日,日军第21旅团及台湾旅团分别在钦州湾之黄屋屯、沙井登陆,按照预定计划,3路平行向南宁攻击前进,激战至19时,第56团放弃防城,退守平旺;第55团退向钦州。17日9时,日军台湾旅团攻占钦具。桂林行营指示,令第170师向百济集结,第135师向南宁集结,担任城防。18日,日军进至小董、大寺、贵合墟之线,第16集团军副总司令韦云淞至南宁指挥作战。19日,日军击退沿途阻击的部队,推进至百济、大塘、唐报之线,20日,蒋介石同意桂林行营使用军委会直辖的第5、第36军和第99军,桂林行营主任白崇禧急令该3个军向南宁、宜山、柳州集中。激战至22日晚,日军突破守军第170师在岂江南岸良庆、蒲庙等地阵地后,进至邕江南岸。此时,由各地调达南宁附近的中国军队,仅有第170师4个团、第135师2个团和第200师1个团,且均因连日行军,甚为疲惫。23日,日军在炮兵、航空兵火力支援下,多次强渡邕江,均被守军第135师以猛烈稠密的火力击退。24日拂晓,日军先以炮兵、航空兵进行火力准备,在北岸守军阵地工事基本上被摧毁、人员伤亡甚大时,其第21旅团在思沿堂附近,发起强渡,10时左右,到达北岸。先头部队占领高等法院附近建筑物,主力分由东,西向南宁夹攻。第135师放弃南宁北撤。日军占领南宁。25日,日军沿邕宾公路追击,在二塘遭新到之第200师第600团阻击,战斗极为激烈,团长邵一之阵亡,副团长重伤,营长以下伤亡三分之一以上,仍固守阵地,力挫敌锋。后因直趋四塘之日军已切断后方联络,为避免被敌围歼,第200师及第135师于当夜撤向高峰隘。26日到达高峰隘东西之线。

为阻止日军继续深入,第16集团军司令夏威令第135、第170、第200师防守高峰隘东西之线;并令第135、第200师各派一部兵力防守昆仑关以南八塘、九塘东西之线。日军继续向高峰隘及八塘进攻。30日,日军攻占八塘。12月1日,日军攻占高峰隘。12月2日,夏威令新到之第188师向八塘反击,未能奏效。他认为已难挽回战局,决定向上林,宾阳及武鸣地区转移。4日,日军攻占昆仑关,停止前进。双方在高峰隘、昆仑关一线,形成对峙。第46军为破坏日军之通讯及运输补给,不断向大塘、小董一带进行袭击。日军抽调数千人,于12月10日开始向邕钦路以东的第46军攻击。守军利用丘陵地带逐次抵抗,迭施反击,双方均有伤亡。至13日,日军转用兵力于龙州,停止进攻。南宁方面的战斗中止。

白崇禧判明日军仅第5师团及台湾旅团后,决心转移攻势,收复南宁。当时,各战区正发动冬季攻势。蒋介石同意反攻南宁,除令空军支援外,另调第66军(欠第151师)由吉安向柳州集中,并令第12集团军以攻势牵制广州日军。白崇禧于12月16日下达作战命令。其方针是:“以攻击北攻之敌、收复南宁之目的,乘敌后续部队到达之前,一举转移攻势,将敌包围于邕江南北地区而歼灭之。”其兵力部署主要是:由夏威任西路军总指挥,其第1纵队(周祖晃,第170、第135师及战车1连)攻击高峰隘,以有力一部进出至四塘、五塘附近,阶同北路军,先围歼昆仑关之敌,再围攻南宁之敌,其第2纵队(韦云淞,第131、第188师,龙州教导总队,山炮1营)袭击吴村墟、大塘、南宁之敌,并阻敌向北增援;由徐庭瑶为北路军总指挥(第5军,第99军一部),以主力攻击昆仑关,多派支队迂回包围敌之侧背,歼灭该地日军后,协同东、西路军围攻南宁;由蔡廷楷任东路军总指挥(第46军,欠第170师;第66军;挺进第3纵队独立第1、第3、第4团),担任破坏邕钦路的任务,重点指向小董南北地区,阻击敌后续部队。第99军主力为总预备队,位于宾阳、古辣附近。预定攻击开始时间为12月18日拂晓。担任昆仑关主攻的是第5军,军长杜幸明,所属部队有荣誉第1师(郑洞国,由战伤康复之老战士组成),新编22师(邱清泉)、第200师(戴安澜)。重炮营(150毫米榴弹炮6门)、野炮营(75毫米野炮6门)、装甲兵团(欠第3,第4营)及高射炮队。山炮2个连。

日军第21军没有获得中国军队即将反攻南宁的情报,为摧毁中国军队的补给基地,令第5师团攻取尤州。12月17日上午,第9旅团由南宁向尤州进攻。第5军之荣誉第1师于18日首先向昆仑关正面发动进攻。日军防守昆仑关的部队为第5骑兵联队和第21联队第3大队及配属的炮兵,在第5军猛烈攻击下,纷纷退向核心阵地。杜聿明见荣1师进展顺利,即令新22师向五塘、六塘攻击,当夜即夺取两地,并破坏了五塘附近的桥梁,阻止日军增援。此时,日军第21联队(欠第3大队)由南宁乘汽车驰援到达九塘,随即与昆仑关日军协同反击,夺回被荣1师占领的罗塘同兴北方高地。19日晨、荣1师左翼部队向653高地发起猛攻。该高地为昆仑关东北之制高点,可瞰制整个昆仑关战场。日军依据工事顽强抵抗。经激烈肉搏争夺,终于歼灭了防守的日军,占领了该高地。至此,日军第21联队及骑兵联队全被包围。20日,鉴于荣1师伤亡较大,杜聿明令第200师超越荣1师阵地,担任正面攻击,在重炮,战车和飞机支援下,日军被迫逐渐向内缩小阵地。日军第5师团长今村均根急命第21旅团长中村正雄率第42联队的2个大队再次增援,但到达六塘时,即为新22师所阻止。中村正雄曾企图以一部兵力从公路以北山地迂回至新22师后方,以与昆仑关第21联队会合,亦被新22师击退。21、22日两天,在第5军猛攻下,分割于九塘一带及昆仑关的日军第21旅团,己陷于极困难的苦境,阵地不断向后退缩,粮食、弹药均极缺乏。昆仑关的野战炮中队因炮弹己尽,惟恐被中国军队缴获,将炮埋于地下;又怕军旗为中国军队所得,已准备焚毁。23日,向中村正雄旅团长发电求援,说:“傍晚前旅团若来不到,第一线难以确保”。当日11时,中村正雄在七塘西北被第200师击为重伤,不能指挥部队。当日下午,台湾旅团步兵第1联队,经激烈战斗后,于16时30分从外围突破包困圈、进至九塘,与被围的第42、第21联队会合,24日,日军第21旅团长中村正雄伤重死亡。被围于九塘一带和昆仑关的3个步兵联队和1个骑兵联队,由第42联队长板田元一指挥。

杜聿明总结近3天的战斗,认识到,攻击缺乏重点,炮火使用分散,步炮协同不良,而且第一线兵力不足,所以未能在援兵到达前歼灭敌人。遂于24日调整部署、集中兵力,先重夺罗塘高地。命荣1师主力攻击罗塘高地,第200师向正面佯攻,炮兵观测所向前推进,以主火力指向罗塘高地,荣1师以第2团及迫击炮营担任主攻,以山炮1门、战防炮2门推进至老手岭北端,直接支援步兵战斗,16时10分,炮兵主力开始破坏射击,17时延伸射程,步兵以梯次队形发起冲击,前仆后继,突入日军阵地。经2小时的白刃格斗,于19时15分完全占领罗塘高地,防守该高地的日军,森田中尉等十几名军官和200余士兵,除2名被俘外,全部被击毙。荣1师第2团之突击营亦伤亡过半,全营仅余不足百人。当罗塘战斗激烈之时,九塘日军曾企图增援,被荣1师第1、第3团各一部,在拓树岭及六扒阻截击退。

25日,日军台湾旅团步兵第2联队增援到达七塘,突破包围圈,加入九塘地区的战斗。昆仑关方面,杜聿明令第200师重点进攻界首高地,令荣1师向昆仑关左侧背攻击。15时10分,中国空军从桂林起飞的3架轻轰炸机和从柳州起飞的1架驱逐机,飞临昆仑关上空。日军误认为是为其空投粮弹的日机,铺设信号布板。驱逐机俯冲扫射,轰炸机降至2000米投弹18枚,全部命中目标。日军人马奔避,第200师乘势攻击,俘获甚多。当晚,第200师攻占界首南端高地,但又被日军反击夺去。荣1师迫近昆仑关。26日,桂林行营命第159师增加至第5军的左翼,协同攻击。杜聿明鉴于日军增援部队突破七塘北方防线,继续北进,有反包围荣1师右翼的危险,决心彻底集中兵力,采用以正面攻击为主之逐次攻略战术。经行营及集团军同意,变更了部署,28日部队调整完毕,于15时开始攻击。以第200师附荣1师第3团及新22师1个团,沿公路东侧,逐次攻略昆仑关东北侧日军各据点。令第1师攻击441高地,新22师为预备队。激战2日,经多次白刃搏斗,将界首附近各据点逐个攻破,日军反击均被击退。30日拂晓,杜聿明命新22师超越第200师,接替担任正面攻击。激战至中午,先后攻占南北同兴、界首及其东南各高地。荣1师亦经多次肉搏后攻占了441高地一角。31日拂晓、杜聿明将指挥所推进至大坟岭,紧靠第一线指挥作战。战斗至8时,日军逐渐不支。第159师攻占653高地,新22师于11时突入昆仑关,完全占领东西侧高地,日军残部逃九塘。

1940年1月1日,第5军再次调整部署。2日继续向九塘、441高地攻击。荣1师于3日夜攻占441高地,新22师于4日攻占九塘,日军退守八塘。1月5日,继续向八塘攻击。此时,向龙州进攻的日军第9旅团已于1939年12月29日返回南宁,日军第5师团长今村均对八塘的防守进行了调整,由第9旅团长及川源七指挥其第11、第41联队及台湾旅团步兵第1、第2联队防守八塘,在昆仑关遭受重创的第21旅团第21、第42联队及骑兵第5联队残部换回南宁,第5军因连日作战,伤亡已重,战斗力大减,所以进攻没有进展。至11日,第5军奉令调思陇附近整理,遗防交第36军接替,昆仑关作战暂告结束。昆仑关作战,第5军伤亡1.65万亲人,日军死伤中村正雄旅团长以下约6000人。日军第5师团第21旅团伤亡过半。这是该师团侵华以来,继平型关、临沂、台儿庄之后的又一次惨败。

为了争夺南宁这一战略要区,中日双方均在调集兵力。至1940年1月末,日军已将其近卫混成旅团、第18师团运至南宁地区;中国军队也调了约19个师的兵力在南宁地区。但战争重心移至宾阳地区。日军第21军司令官安藤利吉于1月23日到达南宁,直接指挥作战。日军于1月28日开始进攻。桂林行营和第四战区由于敌情掌握不准确,兵力部署有失误,战斗至2月4日,中国军队全线溃退,思陇、昆仑关等地再次落入日军手中,武鸣亦为日军攻占。但日军兵力不足,深入作战,后方空虚,补给困难,并受到中国军队的不断袭扰,难以巩固其新占领区。中国第12集团军又开始加强对粤北日军的攻击,迫使日军不得不收缩战线,从2月9日起,日军开始南撤,其第18师团于16日由钦县撤回广州以北.中国军队跟踪尾追,又进抵昆仑关、高峰隘东西之线。经激战后,在七塘、八塘地区与日军形成对峙。

1940年2月22日,蒋介石在柳州召开高级将领军事会议,对南宁地区的作战和冬季攻势作战进行检讨总结。因南宁、宾阳方面失利,2月25日会议结束时,蒋介石宣布了南宁方面作战将领的奖惩名单:桂林行营主任白崇禧以督率部队不力,予以降级。1月28日调来指挥作战的军委会政治部部长陈诚以指导无方,予以降级,第37集团军总司令叶肇,予以扣押,交军法宣判;第38集团军总司令徐廷瑶,第36、第66、第99军军长姚纯、陈骥、傅仲芳,第36军参谋长郭肃,第49、第160师师长李精一、宋士台等均撤职查办。第35集团军总司令邓龙光、第46军军长何宣、第76师师长王凌云各记功一次。这是七七事变以来各战役中高级将领受处分最多的一次。